Je voudrais ajouter à la réponse de James quelques exemples concrets. J'ai utilisé cet opérateur pour extraire des sections de texte basées sur des expressions régulières. J'écrivais un outil qui impliquait l'exécution de commandes sur un serveur distant via Net :: SSH. Ce serveur particulier avait la fâcheuse habitude d'imprimer un MOTD, que la session soit une session de connexion ou non. Cela a eu pour résultat de récupérer beaucoup de déchets lorsque j'ai exécuté une commande et récupéré la sortie. Comme je n'avais pas beaucoup d'influence sur la configuration du serveur, j'ai créé un petit script qui imprimait un délimiteur, exécutait le programme et imprimait un autre délimiteur. La sortie ressemblait à ceci.
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'opérateur bascule est un raccourci utile pour retirer seulement la section de code avec la sortie que je avais besoin. J'ai utilisé une regex qui correspondait aux 25 plus grands que les ">" pour commencer le match, et 25 moins que les "<" pour terminer le match.
output.each { |line| puts line if line[/^>{25}/] .. line[/^<{25}/] }
Sortie
>>>>>>>>>>>>>>>>>>>>>>>>>
Program Output
<<<<<<<<<<<<<<<<<<<<<<<<<
La plupart des exemples que j'ai vu ont impliqué en tirant des blocs de données d'un fichier ou des tableaux basés sur des expressions régulières. Certains autres exemples qui viennent à l'esprit sont tirant sur les conflits de fusion git, certains enregistrements de systèmes de fichiers plats hérités (comme les structures écrites dans le fichier), et les fichiers journaux. Fondamentalement, à chaque fois que vous devez extraire des sections en fonction des données de début et de fin plutôt que du contenu d'une seule ligne. C'est un peu plus complexe qu'une simple regex, mais moins complexe que l'écriture d'un analyseur.
-1: code non testé. Que penses-tu que c'est, perl? vous avez besoin de 'print if ($ _ = ~/third /) .. ($ _ = ~/fifth /)' (Je sais que ce n'est pas votre code, mais il n'est pas nécessaire de continuer à diffuser du code utilisant des fonctionnalités obsolètes). – rampion
Quelle est l'utilisation réelle pour cela? Quand pourrais-je avoir besoin d'imprimer les 3ème à 5ème lignes à partir d'un fichier (assez de fois pour que ça en vaille la peine)? – kajaco
Oubliez environ 3 et 5. Il s'agit d'extraire une section du fichier délimitée par une balise de début et une balise de fin. J'espère que vous voyez mieux pourquoi c'est un exemple du monde réel. Maintenant, la version non-flip-flop équivalente impliquerait l'ajout de variables pour l'état, plus si les instructions: juste un code plus complexe. – inger