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?

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top