flip-flop-operatore / readline-counter domanda
Domanda
La lettura di questo Perl: file estratto da 1 a n (Windows) non ho capito la parte flip-flop-operatore / readline-counter.
perl -nE 'say $c if $c=1..3' my_file
1
2
3E0
Qualcuno potrebbe spiegare a me più dettagliato in cui questa uscita viene?
Soluzione
Per citare perlop :
In un contesto scalare, restituisce "
..
" un valore booleano. L'operatore è bistabile, come un flip-flop, e emula la linea-gamma (virgola) operatore del sed , awk , e varie redattori. Ciascun operatore "..
" mantiene il proprio stato booleano, anche attraverso chiamate a una subroutine che contiene esso. È falso finché la sua sinistra operando è falso. Una volta che la sinistra operando è vero, l'operatore gamma soggiorni vero fino a quando l'operando di destra è vero, dopo di che l'operatore gamma diventa di nuovo falsa. Non diventa falso fino alla prossima volta la gamma operatore viene valutata. Può verificare la operando destro e diventare falsa sul stessa valutazione è diventato vero (come in awk ), ma restituisce ancora vero una volta. Se non si desidera che per testare il diritto operando fino alla successiva valutazione, come in sed , basta usare tre punti ( "...
") invece di due. In tutti gli altri aspetti, "...
" si comporta come "..
" fa.L'operando di destra non viene valutato mentre l'operatore è in "false" Stato, e la sinistra operando non è valutato quando l'operatore è in "Vero" stato. La precedenza è un poco inferiore
||
e&&
. Il valore restituito è la stringa vuota per falsa, o un numero di sequenza (A cominciare da 1) per la vera. Il numero di sequenza viene reimpostato per ciascun gamma incontrato. La sequenza finale il numero in un intervallo ha la stringa "E0" aggiunto ad esso , che non influisce il suo valore numerico, ma ti dà qualcosa da cercare, se si desidera escludere il punto finale. È possibile escludere il punto di inizio per in attesa del numero di sequenza deve essere superiore a 1.Se uno degli operandi di scalare "
..
" è un espressione costante, che è operando ritenuto vero se è uguale (==
) il numero corrente di linea in ingresso (la variabili$.
).
(enfasi aggiunta)