2017-09-21 2 views
-1

Unten ist ein Beispiel dafür, was ich redePerl-Datei existiert Test schlägt fehl, wenn Pfad Leerzeichen enthält

$PathPlusFileName gets set in Gtk2 File Chooser dialog SUB 

if (-e $PathPlusFileName) { 
    print "found file\n"; 
} else { 
    print "did not find file\n"; 
} 

IF-Block so lange funktioniert, wie es keine Leerzeichen im Pfadnamen. Habe versucht, den Pfad doppelt zu zitieren, hat nicht geholfen. Irgendwelche Vorschläge zur Korrektur werden geschätzt.

+1

Ich bin sicher, das ist kein Problem mit Perl selbst. Es könnte leicht ein Problem mit Gtk2 sein. Bitte zeigen Sie ein Minimum , vollständiges und überprüfbares Beispiel, das das Problem reproduziert –

+2

In einem (jetzt gelöschten) Kommentar haben Sie geschrieben, dass der Pfad '//mnt/backup/Backup_1.0/2017-09-19_Dell_140g \ Deb9.1_MATE_Desktop/20170919_swap2.000' lautet , dh hat einen umgekehrten Schrägstrich vor dem Leerzeichen Ist der Backslash wörtlich Teil des Dateinamens oder wird es verwendet, um das Leerzeichen zu verwerfen? Der '-e'-Operator erfordert nicht, dass Sie den Dateinamen zu vermeiden. – amon

Antwort

3

Es funktioniert gut:

#!/usr/bin/perl 

use strict; 
use warnings; 

my $filename = 'name with spaces'; 
open (my $testfile, '>', $filename) or warn $!; 

if (-e "name with spaces") { 
    print "\"$filename\" exists\n"; 
} 

Ich vermute, dass Sie etwas finden sonst nicht in Ordnung ist. Meine erste Vermutung wäre - haben Sie sich an chomp Ihre Eingabe erinnert? Aber wir können nicht antworten, ohne zu sehen, wie dieser Wert gesetzt ist.

+0

Ja, es war chomp used on resulting den Pfad – Jay

+1

Aber was _ist_ der resultierende Pfad? Haben Sie versucht, es zu drucken, um zu sehen, was gerade weitergegeben wird? – Sobrique

-1

setzen Sie Ihre Variable in Anführungszeichen:

if (-e "$PathPlusFileName") 
+0

Perl ist keine Shell. Perl hat keine vergleichbare Wort-Expansion-Funktion. Wenn man also eine Variable in Anführungszeichen setzt, tut das hier eigentlich nichts. (Dies würde nur einen Unterschied machen, wenn die Variable ein Objekt mit Operator-Überladungszauber hätte, was hier wahrscheinlich nicht der Fall ist.) – amon

+0

Mein schlechtes, du hast Recht, hättest es vor der Antwort testen sollen! – jimtut

0

Wie aktiven Code diese Zeile von Test links der vorherigen Programmierer, die auf dem Paket GUI Abschnitt arbeiten entpuppen hatte. $ PathPlusFileName = ~ s// \/g; Einer wurde entfernt, wenn (-e hat wie erwartet funktioniert. Vielen Dank für die Hilfe und die Vorschläge!

Verwandte Themen