ファイルが存在しないのに、zcat への Perl パイプが終了しないのはなぜですか?
質問
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.
解決
(それが正常にzcatをを実行すると)
あなたのopen
はあなたががファイルディスクリプタを閉じるまで、あなたがzcat
の終了コードを取得することはありません成功します。
あなたは、ファイルが存在し、読み取り可能であるかどうかを確認したい場合があり、例えばます。
die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
他のヒント
あなたは例えば、PerlIO::gzip
を使用して検討する必要があります。
use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
2 番目の例では、 Perlで開かれたファイル 存在しないので、死んでしまいます。
最初の例では、 Perl によって呼び出されるコマンド (結果は問わず) 実行されるため、死ぬ理由はありません。
所属していません StackOverflow