2017-10-13 4 views
2

Donnant sur certaines questions récentes, j'ai vu la construction maladroite suivante: (. Le langage que je connais est while (my $line = <$IN>) {...})

open my $IN, "<", 'file' or die "can't read from 'file'. $!"; 
foreach my $line (<$IN>) { 
    ... 
} 

Ma question est, ne l'idiome foreach forcer le <> en contexte de liste, et donc exiger que l'interprète slurp l'ensemble du fichier?

+1

Oui, c'est le cas ... Je ne sais pas trop comment développer ça! – Borodin

+0

Cela s'appelle le contexte de la liste et n'a rien à voir avec les tableaux, mais oui. – ikegami

+0

merci pour les "réponses". (edit "array context" -> "list context") – flies

Répondre

3

Oui.

Les expressions de liste d'une boucle foreach sont évaluées dans un contexte de liste. Il y a quelques optimisations (par exemple for ($x..$y) et for (@a) utilise la mémoire "non"), mais for (readline($FH)) n'est pas optimisé.