bascule opérateur / readline-counter question
Question
La lecture de ce Perl: les lignes d'extrait de 1 à n (Windows) Je ne comprenais pas la bascule-opérateur / readline-contre partie.
perl -nE 'say $c if $c=1..3' my_file
1
2
3E0
Quelqu'un pourrait-il me expliquer plus détaillée où cette sortie vient?
La solution
perlop :
Dans un contexte scalaire, renvoie « de
..
» un valeur booléenne. L'opérateur est bistables, comme une bascule, et émule la ligne de gamme (virgule) opérateur de sed , awk , et divers rédacteurs en chef. Chaque opérateur «..
» maintient son propre état booléen, même à travers les appels à un sous-programme qui contient il. Il est faux aussi longtemps que sa gauche opérande est faux. Une fois que la gauche opérande est vrai, l'opérateur d'intervalle reste fidèle jusqu'à ce que l'opérande droit est vrai, après quoi l'opérateur d'intervalle devient fausse à nouveau. Il ne devient pas faux jusqu'à ce que la prochaine fois que la plage l'opérateur est évalué. Il peut tester la opérande de droite et de devenir faux sur la même évaluation, il est devenu vrai (comme dans awk ), mais il retourne toujours vrai une fois. Si vous ne voulez pas tester le droit opérande jusqu'à ce que l'évaluation suivante, comme sed , il suffit d'utiliser trois points ( "...
") au lieu de deux. Dans tous les autres égards, "...
" se comporte comme "..
" fait.L'opérande droit n'est pas évalué tandis que l'opérateur est dans le « faux » état, et l'opérande gauche n'est pas évaluée tandis que l'opérateur se trouve dans la état « vrai ». La priorité est peu plus bas que
||
et&&
. La valeur est soit la Returned chaîne vide pour faux, ou un numéro de séquence (En commençant par 1) pour vrai. le numéro de séquence est remis à zéro pour chaque rencontré plage. La séquence finale nombre dans une plage a la chaîne « E0 » annexé à ce , qui ne porte pas atteinte sa valeur numérique, mais vous donne quelque chose à chercher si vous voulez exclure le point final. Vous pouvez exclure le point de commencer en attendant la numéro de séquence pour être supérieur à 1.Si l'opérande scalaire «
..
» est un expression constante, que l'opérande est considéré comme vrai si elle est égale (==
) au numéro de ligne d'entrée de courant (le variable$.
).
(italique ajouté)