ファイルが存在しないのに、zcat への Perl パイプが終了しないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/4014425

  •  26-09-2019
  •  | 
  •  

質問

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 によって呼び出されるコマンド (結果は問わず) 実行されるため、死ぬ理由はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top