À quoi sert la Perl?

Quelle est l'utilité de <> en Perl. Comment l'utiliser ? Si nous suffit d'écrire

<>;

et

while(<>)
24
demandé sur Sinan Ünür 2012-09-05 10:09:12
la source

6 ответов

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é.

29
répondu Tony K. 2012-09-05 10:41:36
la source
 <>;

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.

10
répondu ikegami 2012-09-05 10:17:35
la source

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.

5
répondu Aquaplanet 2012-09-05 10:18:24
la source

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.

5
répondu Hjulle 2014-08-10 21:38:27
la source

dans de nombreux cas de programmation avec du sucre syntaxique comme celui-ci,Deparse O est utile pour savoir ce qui se passe:

$ perl -MO=Deparse -e 'while(<>){print 42}'
while (defined($_ = <ARGV>)) {
    print 42;
}
-e syntax OK
4
répondu memowe 2012-09-05 13:51:00
la source

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.

2
répondu Vijay 2012-09-05 10:15:16
la source

Autres questions sur