Perché non il mio tubo di Perl a morire zcat se il file non esiste?
Domanda
Se il mio file gz non esiste, perché non morire?
$ cat test.pl
open(FILE, "zcat dummy.gz |") or die "DIE";
$ ./test.pl
zcat: dummy.gz: No such file or directory
Se leggo un file normalmente, funziona come previsto:
$ cat test2.pl
open(FILE, "dummy.gz") or die "DIE";
$ ./test2.pl
DIE at ./test.pl line 2.
Soluzione
Il tuo open
riesce (come viene eseguito correttamente zcat), non sarà possibile ottenere il codice di uscita del zcat
finché non si chiude il descrittore di file però.
Si potrebbe voler controllare se il file esiste ed è leggibile prima di iniziare, però, ad es.
die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
Altri suggerimenti
Si potrebbe voler considerare l'utilizzo PerlIO::gzip
, ad es.
use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
Nel vostro secondo esempio, il file aperto da perl non esiste, quindi morirà.
Nel vostro primo esempio, il Comando chiamato da perl esegue (con qualsiasi risultato), quindi non c'è alcuna ragione per morire.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow