2010-02-22 8 views

Répondre

16

De l'Perl help:

 
-n assume "while (<>) { ... }" loop around program 

Ceci est une opération purement textuelle, il donne ce programme:

while (<>) { $_{$F[0]}+=$F[1]}print"$_ $_{$_}"for keys%_;{ } 

Ceci est un abus du commutateur -n parce que la boucle while est fermée au début en raison de la } inégalée dans le programme d'origine. Mais la fermeture } qui est ajoutée par le commutateur -n doit toujours correspondre à quelque chose, et c'est pourquoi il doit y avoir un { supplémentaire à la fin du programme, même si cela ne fait rien. En d'autres termes, la seule raison pour laquelle le dernier { est là est de ne pas donner une erreur de syntaxe.

+2

Peut-être gentil de mentionner -MO = Deparse – ysth

+0

Nous montrons plusieurs exemples dans _Effective Perl Programming, 2nd Edition_ qui utilisent cette astuce. :) –

+3

Une meilleure façon d'accomplir cela (à mon avis) serait d'utiliser un bloc 'END {}'. –