84 votes

Lecture programmée à partir de STDIN ou d'un fichier d'entrée en Perl

Quel est le moyen le plus simple de lire par programmation à partir de stdin ou d'un fichier d'entrée (si fourni) en Perl?

101voto

ennuikiller Points 28005
 while (<>) {
print;
}
 

lira soit à partir d'un fichier spécifié sur la ligne de commande, soit à partir de stdin si aucun fichier n'est donné

52voto

Ron Points 117

Ceci fournit une variable nommée avec laquelle travailler:

 foreach $line ( <STDIN> ) {
    chomp( $line );
    print "$line\n";
}
 

Pour lire un fichier, dirigez-le comme ceci:

 program.pl < inputfile
 

18voto

el.pescado Points 7960

Vous devez utiliser l'opérateur <>:

 while (<>) {
    print $_; # or simply "print;"
}
 

Qui peut être compacté à:

 print while (<>);
 

Fichier arbitraire:

 open F, "<file.txt" or die $!;
while (<F>) {
    print $_;
}
close F;
 

17voto

Neil Best Points 326

Les "meilleurs" dans certaines situations, c'est de profiter de l' -n de l'interrupteur. Il implicitement enveloppe votre code avec un while(<>) boucle et gère l'entrée de manière flexible.

En slickestWay.pl:

#!/usr/bin/perl -n

COMMENCER: {
 # faire quelque chose une fois ici
}

# mettre en œuvre une logique pour une ligne d'entrée
print $result;

Sur la ligne de commande:

chmod +x slickestWay.pl

Maintenant, en fonction de votre effectuez l'une des opérations suivantes:

  1. Attendez que la saisie de l'utilisateur

    ./slickestWay.pl
    
  2. Lecture de fichier(s) nommé dans les arguments (pas de redirection nécessaire)

    ./slickestWay.pl input.txt
    ./slickestWay.pl input.txt moreInput.txt
    
  3. Utilisez un tuyau

    someOtherScript | ./slickestWay.pl 
    

L' BEGIN bloc est nécessaire si vous avez besoin d'initialiser une sorte d'interface orientée objet, tels que Text::CSV, vous pouvez les ajouter à du beau spectacle avec -M.

-l et -p sont aussi vos amis.

6voto

Thorsten Niehues Points 1167

Faire

 $userinput =  <STDIN>; #read stdin and put it in $userinput
chomp ($userinput);    #cut the return / line feed character
 

si vous voulez lire une seule ligne

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X