2017-09-21 19 views
-1

は以下のブロックがある限り、パス名にスペースが含まれていないとして動作する場合、私はおよそPerlのファイルは、パスにスペース

$PathPlusFileName gets set in Gtk2 File Chooser dialog SUB 

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

を話しているかの一例である含まれている場合、テストが失敗した存在します。 パスを二重引用符で囲みましたが、助けにはなりませんでした。 修正する方法についてのご意見はありがとうございます。

+1

これはPerl自体の問題ではないと確信しています。 –

+2

(今削除された)コメントには、パスが '/mnt/backup/Backup_1.0/2017-09-19_Dell_140g \ Deb9.1_MATE_Desktop/20170919_swap2.000'と書かれています。つまり、スペースの前にバックスラッシュがあります。バックスラッシュは文字通りファイル名の一部ですか、スペースをエスケープするのに使用されていますか?-eオペレータはファイル名をエスケープする必要はありません。 – amon

答えて

3

それは正常に動作します:

#!/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"; 
} 

私はあなたが何かを見つけることができます疑いが間違って起こっています。私の最初の推測は - chompあなたの入力を覚えましたか?しかし、この値がどのように設定されているかを見ることなく答えられるわけではありません。

+0

パスの結果に使用される – Jay

+1

しかし、結果として生じるパスは何ですか?パスされたものを見るために印刷しましたか? – Sobrique

-1

だけ引用符であなたの変数を置く:それは判明したよう

if (-e "$PathPlusFileName") 
+0

Perlはシェルではありません。同等の単語拡張機能はありません。したがって、変数を引用符で囲むことは実際には何も行いません。 (これは、変数がオペレータ過負荷の魔法を持ったオブジェクトを保持している場合にのみ違いがあります。 – amon

+0

あなたが正しくありません。 – jimtut

0

、パッケージのGUIセクションに取り組む前のプログラマは、アクティブテストのコード行を残していました。 $ PathPlusFileName =〜//\/g; もし、(-eが期待どおりに動いていたら)削除しました。ご協力ありがとうございます!

関連する問題