¿Por qué mi tubo de Perl para morir zcat si el archivo no está allí?
Pregunta
Si mi archivo gz no existe, ¿por qué no morir?
$ cat test.pl
open(FILE, "zcat dummy.gz |") or die "DIE";
$ ./test.pl
zcat: dummy.gz: No such file or directory
Si leo un archivo, normalmente, funciona como se espera:
$ cat test2.pl
open(FILE, "dummy.gz") or die "DIE";
$ ./test2.pl
DIE at ./test.pl line 2.
Solución
Su open
tiene éxito (ya que se ejecuta con éxito zcat), no recibirá el código de salida de zcat
hasta que se cierra el descriptor de fichero sin embargo.
Es posible que desee comprobar si el archivo existe y es legible antes de empezar, sin embargo, por ejemplo.
die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
Otros consejos
Es posible que desee considerar el uso de PerlIO::gzip
, por ejemplo.
use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
En el segundo ejemplo, el archivo abierto por el Perl no existe, por lo que va a morir.
En el primer ejemplo, el comando llamado por Perl se ejecuta (con cualquier resultado), así que no hay razón para morir.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow