flip-flop-operador / readline-counter pregunta
Pregunta
La lectura de este Perl: filas de extracto de 1 a N (Windows) no entendía la parte flip-flop-operador / readline de venta libre.
perl -nE 'say $c if $c=1..3' my_file
1 | 2
3E0
Podría alguien explicarme más detallada en esta salida viene?
Solución
Para citar perlop :
En el contexto escalar, devuelve "
..
" una valor booleano. El operador es biestable, como un flip-flop, y emula la línea de gama (coma) operador de sed , awk , y varios editores. Cada operador "..
" mantiene su propio estado booleano, incluso a través de llama a una subrutina que contiene eso. Es falso, siempre y cuando su izquierda operando es falso. Una vez que la izquierda operando es verdadero, el operador de rango se mantiene fiel hasta que el operador derecho es cierto, después de lo cual el operador de rango se convierte en falsa de nuevo. No se convierte en falsa hasta que la próxima vez que el rango se evalúa operador. Se puede probar la operando derecho y convertirse en la falsa misma evaluación que se hizo realidad (como en awk ), pero todavía devuelve verdadero vez. Si usted no quiere poner a prueba la derecha operando hasta la siguiente evaluación, tal como en sed , sólo tiene que utilizar tres puntos ( "...
") en lugar de dos. En todos los demás aspectos, "...
" se comporta como "..
" lo hace.El operando de la derecha no se evalúa mientras que el operador se encuentra en la "falsa" estado, y de la izquierda operando no es evaluó mientras el operador se encuentra en la estado "verdadero". La precedencia es una poco menor que
||
y&&
. El valor devueltas es la cadena vacía para falso, o un número de secuencia (Comenzando con 1) para la verdadera. los número de secuencia se restablece para cada gama encontrado. La secuencia final número en un rango tiene la cadena "E0" anexado a él , que no afecta su valor numérico, pero le da algo para buscar si desea excluir el punto final. Puede excluir el punto de partida por la espera de la número de secuencia sea mayor que 1.Si alguno de los operandos de escalar "
..
" es una expresión constante, que operando es considerado verdadero si es igual (==
) al número de línea de entrada actual (la variable de$.
).
(énfasis añadido)