Comment pipe stdin dans un script perl qui est à la recherche pour l'entrée comme le seul paramètre?
Cette question a été nécessité de la paresse de ma part, car j'ai des dizaines de scripts qui sont exécutés dans la structure simple:
perl my_script.pl my_input_file
...et la sortie est affichée sur la sortie standard. Cependant, maintenant je me rends compte que j'ai certaines situation dans laquelle je voudrais tuyau d'entrée dans ces scripts. Donc, quelque chose comme ceci:
perl my_script.pl my_input_file | perl my_next_script.pl | perl third_script.pl > output
Personne ne sait d'une façon de le faire sans recoder tous mes scripts pour accepter stdin à la place d'un utilisateur défini par le fichier d'entrée? Mes scripts pour le nom de fichier par une instruction de ce genre:
open(INPUT,$ARGV[0]) || die("Can't open the input file");
Merci pour toutes les suggestions!
OriginalL'auteur jake9115 | 2013-10-18
Vous devez vous connecter pour publier un commentaire.
Utilisation
-
comme nom de fichierOriginalL'auteur Сухой27
mpapec a fourni la solution la plus simple. Je tiens à recommander le diamant de l'opérateur:
<>
.Dans un script où vous ne
Vous pouvez utiliser le diamant de l'opérateur de remplacer la plupart de ce code
Le descripteur de fichier nom sera
ARGV
si vous utilisez l'argument des noms de fichiers, ouSTDIN
si pas. Le nom de fichier sera trouvé dans$ARGV
.Cet opérateur invoque un comportement où Perl semble pour l'entrée à partir du nom de fichier arguments, ou de l'entrée standard.
Ce qui signifie que si vous ne
ou
Le diamant opérateur de prendre l'entrée à l'amende juste.
Remarque: Votre
open
déclaration est dangereux. Vous devez utiliser trois argument ouvrir avec le mode explicite, et lexicales descripteur de fichier. Ledie
déclaration connecté, il doit contenir la variable d'erreur$!
de fournir des informations sur les raisons de l'échec de l'ouverture.OriginalL'auteur TLP