comparación usando los perl -w -Mstrict
:¿Qué está pasando cuando my() es condicional?
# case Alpha
print $c;
...
# case Bravo
if (0) {
my $c = 1;
}
print $c;
...
# case Charlie
my $c = 1 if 0;
print $c;
Alpha
y Bravo
tanto se quejan del símbolo global que carezcan de denominación paquete explícito, el cual es de esperar. Pero Charlie
no da la misma advertencia, sólo que el valor es inicializado, que huele muy parecido:
# case Delta
my $c;
print $c;
¿Qué está pasando exactamente debajo del capó? (Aunque algo como esto nunca debería escribirse para el código de producción)
En el caso Bravo, '$ c' está en el ámbito léxico a la' Si (0) ... 'bloque, y es una error (bajo 'use strict') para referirse a él fuera de ese bloque. – mob
Por cierto, el comportamiento de 'my $ c = 1 if 0; ... $ c ... 'está oficialmente indefinido (y documentado como tal), lo que significa que no está permitido y puede dar lugar a un comportamiento no deseado (por ejemplo, bloqueo). Bueno, no se bloqueará, pero podría :) – ikegami
@ikegami hmm tienes toda la razón, aparece en la sección "modificadores de estado" de perlsyn. buen recordatorio! –