Pourquoi ne pas ma pipe Perl à Zcat mourir si le fichier est pas là?
Question
Si mon fichier gz n'existe pas, pourquoi ne pas mourir?
$ cat test.pl
open(FILE, "zcat dummy.gz |") or die "DIE";
$ ./test.pl
zcat: dummy.gz: No such file or directory
Si je lis un fichier normalement, il fonctionne comme prévu:
$ cat test2.pl
open(FILE, "dummy.gz") or die "DIE";
$ ./test2.pl
DIE at ./test.pl line 2.
La solution
Votre open
réussit (comme il fonctionne avec succès zcat), vous ne recevrez pas le code de sortie de zcat
jusqu'à ce que vous fermez le descripteur de fichier si.
Vous pouvez vérifier si le fichier existe et est lisible avant de commencer si, par exemple.
die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
Autres conseils
Vous pouvez envisager d'utiliser PerlIO::gzip
, par exemple.
use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
Dans votre deuxième exemple, le fichier ouvert par perl n'existe pas, il va mourir.
Dans votre premier exemple, la commande appelé par perl (avec tout exécute résultat), donc il n'y a aucune raison de mourir.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow