4

gz ファイルが存在しない場合、なぜ DIE にならないのですか?

$ cat test.pl    
open(FILE, "zcat dummy.gz |") or die "DIE";

$ ./test.pl    
zcat: dummy.gz: No such file or directory

通常どおりファイルを読み取ると、期待どおりに動作します。

$ cat test2.pl    
open(FILE, "dummy.gz") or die "DIE";

$ ./test2.pl    
DIE at ./test.pl line 2.
4

3 に答える 3

5

open成功します(zcatが正常に実行されるため)、zcatファイル記述子を閉じるまで、の終了コードは取得されません。

ただし、開始する前にファイルが存在し、読み取り可能かどうかを確認することをお勧めします。

die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
于 2010-10-25T12:23:52.003 に答える
3

の使用を検討することをお勧めしPerlIO::gzipます。

use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
于 2010-10-25T12:21:25.623 に答える
3

2 番目の例では、perl によって開かれたファイルが存在しないため、ファイルは終了します。

最初の例では、perl によって呼び出されたコマンドが実行され (結果が返されます)、終了する理由はありません。

于 2010-10-25T12:24:44.697 に答える