Quelle est l'utilisation de <> en Perl?
Ce qui est de l'utilisation de <> en Perl. Comment l'utiliser ?
Si nous écrivons simplement
<>;
et
while(<>)
ce que c'est que le programme dans les deux cas?
- Je dirais <> signifie "STDIN",entrée à partir de l'invite de commandes.
<>
etwhile(<>)
est expliqué dans perlop (ce dernier est également expliqué dansperlvar
).<>
est appelé le "null descripteur de fichier". C'est un spécial construire et ne signifie pas seulement<STDIN>
.<>
n'est pas un descripteur de fichier, "null" ou autrement. C'est un opérateur. Plus précisément, lereadline
de l'opérateur. Il y a une référence à ce que l'angle de l'opérateur" in perlvar, bien qu'il n'y en a pas fait un tel opérateur. Les crochets sont utilisés par les deux opérateurs:readline
ouglob
. L'opérateur dépend du contenu de la parenthèse.- Je pense que "null" n'est pas un bon mot, dans ce contexte, car il comporte des connotations d'autres langues qui n'existent pas en perl. Le dernier membre de phrase, c'est mieux.
- C'est bizarre. Je crains que je ne m'en souviens pas.
- Notez que cela peut être dangereux lorsqu'il est utilisé avec non fiables arguments (par exemple,
script.pl *
)
Vous devez vous connecter pour publier un commentaire.
Les réponses ci-dessus sont tout à fait correct, mais il pourrait venir à travers plus de en clair, si vous comprenez général de la ligne de commande UNIX utilisation. Il est très commun de vouloir une commande de travailler sur plusieurs fichiers. E. g.
De la ligne de commande shell (bash et al) se transforme en:
en d'autres termes, ls de ne jamais voir '*.c' moins que le modèle ne correspondent pas. Essayez ceci à l'invite de commande (pas de perl):
vous remarquerez que vous n'obtenez pas une *.
Donc, si la coque est de vous remettre un tas de noms de fichiers, et vous voulez aller à travers chacun de données, à son tour, perl <> opérateur vous donne une belle façon de le faire...il met la ligne suivante du fichier suivant (ou stdin si aucun des fichiers sont nommés) dans $_ (la valeur par défaut scalaire).
Ici est un homme pauvre grep:
L'exécution de ce script:
serait d'imprimer toutes les lignes de tous les fichiers qui correspondent au motif donné.
serait d'utiliser le chat pour générer quelques lignes de texte qui sera ensuite vérifié pour le modèle de la boucle en perl.
Donc, vous voyez, alors que(<>) vous procure un très standard UNIX en ligne de commande de comportement...processus de tous les fichiers que je vous donne, ou processus de la chose, j'ai joué à vous.
est un court chemin de l'écriture
ou si vous ajoutez un argument par défaut,
readline
est un opérateur qui lit une ligne dans le fichier spécifié poignée. Lecture à partir de la poignée de fichier spécialARGV
va lireSTDIN
si@ARGV
est vide ou à partir de la concaténation des fichiers nommés par@ARGV
si elle ne l'est pas.Comme pour
C'est une erreur de syntaxe. Si vous aviez
il se réécrit pour
Et comme expliqué précédemment, qui signifie la même chose que
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é le diamant de l'opérateur et de flux de données à partir de stdin si ARGV est vide ou chaque ligne dans les fichiers nommés dans ARGV. Cette page web http://docstore.mik.ua/orelly/perl/learn/ch06_02.htm l'explique très bien.
Dans de nombreux cas, de la programmation avec le sucre syntaxique comme ça,
Deparse
de O est utile de savoir ce qui se passe:Citant
perldoc perlop
:il prend le STDIN d'entrée standard:
ci-dessous est l'exécution:
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.