No excepto como condición de una declaración while
.
$ perl -MO=Deparse -e 'while(<>) { print }'
while (defined($_ = <ARGV>)) {
print $_;
}
-e syntax OK
$ perl -MO=Deparse -e '<>; print'
<ARGV>;
print $_;
-e syntax OK
perlop
documentos que la asignación automática a $_
sólo ocurre en este contexto:
Normalmente debe asignar el valor devuelto a una variable, pero hay es una situación en la que ocurre una asignación automática . Si y solo si el símbolo de entrada es lo único dentro del condicional de una declaración "while" (incluso si está disfrazada como un bucle "for (;;)"), el valor es asignado automáticamente a la variable global $ _ , destruyendo lo que estaba allí anteriormente. (Esto puede parecer algo extraño para ti, pero usarás el constructo en casi todos los scripts de Perl que escribas). La variable $ _ no está implícitamente localizada. Tendrás que poner un "local $ _;" antes del ciclo si quieres que eso suceda.
La primera es en contexto escalar, ¿no? –
@PaulTomblin: ¿Entonces? –
'$ a = <>; print $ a; 'imprime la primera línea. Así que supongo que '<>;' no actualiza $ _. –