$_
es el "espacio de coincidencia de patrón y entrada predeterminado". En otras palabras, si lee desde un identificador de archivo en la parte superior de un ciclo while, o ejecuta un ciclo foreach y no nombra una variable de ciclo, $_
está configurado para usted.
Sin embargo, si se escribe un bucle foreach y nombrar una variable de bucle, $ _ ajustado no up.This puede ser justificado por código siguiente:
1. #!/usr/bin/perl -w
2. @array = (1,2,3);
3. foreach my $elmnt (@array)
4. {
5. print "$_ ";
6. }
La salida es "Uso del valor no inicializado en la concatenación (.)"
Sin embargo si se reemplaza la línea 3 por:
foreach (@array)
La salida es "1 2 3" como se esperaba.
Ahora en su caso, siempre es mejor nombrar una variable de bucle en un bucle foreach para hacer que el código sea más legible (perl ya está maldito por ser menos legible), de esta manera tampoco será necesario asignación a la variable $_
y problemas de alcance resultantes.
Buena respuesta, ++. Sin embargo, no estoy de acuerdo en que 'for (@array) {}' solo se use si va a operar principalmente en '$ _'. El hecho de que la primera versión fuerce una copia es beneficioso si planea cambiar el valor de '$ escalar'. No hay ninguna razón para escribir 'para mi $ alias (@array) {mi $ escalar = $ alias; ...} '. Esto en un uso particularmente válido de la forma tópica del bucle for. – daotoad
@daotoad => Acepto, respondo actualizado, gracias por captar eso –