Vorrei aggiungere alla risposta di James alcuni esempi concreti. Ho usato questo operatore per estrarre sezioni di testo basate su espressioni regolari.
Stavo scrivendo uno strumento che implicava l'esecuzione di comandi su un server remoto tramite Net :: SSH. Questo particolare server aveva la fastidiosa abitudine di stampare un MOTD indipendentemente dal fatto che la sessione fosse o meno una sessione di accesso. Ciò ha comportato il recupero di molti rifiuti quando ho eseguito un comando e recuperato l'output. Dato che non avevo molta influenza sulla configurazione del server, creai un piccolo script che stampava un delimitatore, eseguiva il programma e poi stampava un altro delimitatore. L'output è stato simile a questo.
Welcome to Server X!
+----------------------------------------------------------------------+
| Use of this server is restricted to authorized users only. User |
| activity may be monitored and disclosed to law enforcement personnel |
| if any possible criminal activity is detected. |
+----------------------------------------------------------------------+
----------------------------------------------
Setting up environment for user Adam.
----------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>
Program Output
<<<<<<<<<<<<<<<<<<<<<<<<<
L'operatore flip-flop è un collegamento utile per tirare fuori solo la sezione di codice con l'uscita avevo bisogno. Ho usato un'espressione regolare che corrispondeva a "25" maggiori di 25 per iniziare la partita e 25 meno di "<" per terminare la partita.
output.each { |line| puts line if line[/^>{25}/] .. line[/^<{25}/] }
uscita
>>>>>>>>>>>>>>>>>>>>>>>>>
Program Output
<<<<<<<<<<<<<<<<<<<<<<<<<
maggior parte degli esempi che ho visto hanno coinvolto tirando blocchi di dati da un file o gli array in base a espressioni regolari. Alcuni altri esempi che vengono in mente sono l'estrazione di conflitti di merge, alcuni record da file system legacy (come le strutture scritte nel file) e file di registro.
In pratica, in qualsiasi momento è necessario estrarre sezioni basate sui dati di inizio e fine anziché solo sul contenuto di una singola riga. È un po 'più complesso di una semplice regex, ma meno complessa della scrittura di un parser.
fonte
2013-01-30 20:09:08
-1: codice non testato. Cosa ne pensi, perl? hai bisogno di 'print if ($ _ = ~/third /) .. ($ _ = ~/fifth /)' (so che non è il tuo codice, ma non c'è bisogno di continuare a diffondere il codice che usa funzionalità deprecate). – rampion
Qual è l'uso effettivo per questo? Quando potrei aver bisogno di stampare dalla 3a alla 5a riga da un file (abbastanza volte per renderlo valido per la codifica)? – kajaco
Dimentica 3 e 5. Si tratta di estrarre una sezione del file delimitata da un tag iniziale e un tag finale. Spero che tu veda meglio perché questo è un esempio del mondo reale. Ora l'equivalente versione non flip-flop implicherebbe l'aggiunta di variabili per lo stato, più istruzioni if: solo codice più complesso. – inger