À quoi sert la Perl?
Quelle est l'utilité de en Perl. Comment l'utiliser ? Si nous suffit d'écrire
<>;
et
while(<>)
<!-Que fait le programme dans les deux cas?
6 réponses
les réponses ci-dessus sont toutes correctes, mais elles pourraient apparaître plus clairement si vous comprenez l'usage général de la ligne de commande UNIX. C'est très courant de commande à travailler sur plusieurs fichiers. E. g.
ls -l *.c
La ligne de commande shell (bash et al), transforme ce dans:
ls -l a.c b.c c.c ...
en d'autres termes, on ne voit jamais '*.à moins que le motif ne corresponde pas. Essayez ceci à une invite de commande (pas perl):
echo *
vous remarquerez que vous n'obtenez pas une *.
donc, si l'interpréteur de commandes vous donne un tas de noms de fichiers, et que vous voulez passer en revue les données de chacun à tour de rôle, l'opérateur <> de perl vous donne une bonne façon de le faire...il place la ligne suivante du fichier suivant (ou stdin si aucun fichier n'est nommé) dans $_ (le scalaire par défaut).
Ici est un homme pauvre grep:
while(<>) {
print if m/pattern/;
}
l'Exécution de ce script:
./t.pl *
imprimer toutes les lignes de tous les fichiers qui correspondent à la modèle.
cat /etc/passwd | ./t.pl
utiliserait cat pour générer quelques lignes de texte qui seraient ensuite vérifiées pour le patron par la boucle en perl.
alors vous voyez, tandis que (<>) vous obtient un comportement en ligne de commande UNIX très standard...traite tous les fichiers que je te donne, ou traite ce que je t'ai envoyé.
<>;
est un court chemin de l'écriture
readline();
ou si vous ajoutez un argument par défaut,
readline(*ARGV);
readline
est un opérateur qui lit une ligne dans le fichier spécifié poignée. Lecture à partir de la poignée du fichier spécial ARGV
va lire STDIN
si @ARGV
est vide ou de la concaténation des fichiers nommés par @ARGV
si il ne l'est pas.
while (<>)
C'est un erreur de syntaxe. Si vous aviez
while (<>) { ... }
il se réécrit
while (defined($_ = <>)) { ... }
Et comme expliqué précédemment, qui signifie la même chose que
while (defined($_ = readline(*ARGV))) { ... }
cela signifie Qu'il va lire les lignes de (déjà expliqué) ARGV
jusqu'à ce qu'il n'y a plus de lignes à lire.
il est appelé l'opérateur diamond et alimente les données de stdin si ARGV est vide ou chaque ligne des fichiers nommés dans ARGV. Cette page web http://docstore.mik.ua/orelly/perl/learn/ch06_02.htm l'explique très bien.
Citant perldoc perlop
:
null descripteur de fichier <> est spécial: il peut être utilisé pour émuler le comportement de sed et awk, et de tout autre programme de filtre Unix qui prend une liste de noms de fichiers, faire de même pour chaque ligne d'entrée de tous les ils. L'entrée de <> vient soit de l'entrée standard, soit de chaque fichier listés sur la ligne de commande.
il faut le STDIN d'entrée standard:
> cat temp.pl
#!/usr/bin/perl
use strict;
use warnings;
my $count=<>;
print "$count"."\n";
>
ci-dessous est l'exécution:
> temp.pl
3
3
>
donc, dès que vous exécutez le script, ça attendra que l'utilisateur donne une entrée.
après 3
est donnée en entrée,il stocke cette valeur dans $count
et il imprime la valeur de l'instruction suivante.