Por que meu tubo Perl para Zcat morre se o arquivo não está lá?
Pergunta
Se meu arquivo GZ não existir, por que não morre?
$ cat test.pl
open(FILE, "zcat dummy.gz |") or die "DIE";
$ ./test.pl
zcat: dummy.gz: No such file or directory
Se eu ler um arquivo normalmente, ele funciona como esperado:
$ cat test2.pl
open(FILE, "dummy.gz") or die "DIE";
$ ./test2.pl
DIE at ./test.pl line 2.
Solução
Sua open
é bem -sucedido (como executa com sucesso o ZCAT), você não terá zcat
O código de saída está até fechar o descritor de arquivo.
Você pode verificar se o arquivo existe e é legível antes de começar, por exemplo.
die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
Outras dicas
Você pode querer considerar usar PerlIO::gzip
, por exemplo.
use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
No seu segundo exemplo, o Arquivo aberto por Perl não existe, então ele morrerá.
No seu primeiro exemplo, o Comando chamado por Perl executa (com qualquer resultado), portanto não há razão para morrer.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow