ProgramaciónDesarrollador Perl Senior

Hable sobre las características del ámbito de las variables en Perl. ¿Qué matices tienen los operadores my y local?

Supere entrevistas con el asistente de IA Hintsage

Respuesta

En Perl, el ámbito de las variables se define con las palabras clave my y local.

  • my crea una variable con un ámbito léxico (solo actúa en el bloque actual).
  • local almacena temporalmente el valor actual de una variable global y establece un nuevo valor durante la existencia del bloque; generalmente se utiliza solo con variables globales (por ejemplo, $_, $/ y otras).

Ejemplo:

my $x = 42; # visible solo en el bloque actual { local $/ = undef; my $input = <STDIN>; # $/ aquí es undef, después del bloque se restaura el valor }

Es preferible usar my debido a su ámbito más predecible.

Pregunta capciosa

¿Qué sucederá al usar my y local con la misma variable, declarada en dos bloques diferentes?

A menudo se responde que local y my funcionan igual, pero no es así. local solo funciona con variables globales (variables de paquete). Una variable declarada con my es invisible para local.

Ejemplo:

our $foo = "global"; { local $foo = "local"; print $foo; # "local" } print $foo; # "global" { my $foo = "lexical"; } # $foo fuera del bloque es la versión global, no "lexical"

Ejemplos de errores reales por desconocer los matices del tema


Historia

En el script, se utilizó local para sustituir temporalmente una variable declarada con my, lo que no generó ningún resultado y causó errores en el procesamiento de eventos en uno de los módulos internos.


Historia

En el proyecto, "localizamos" $_ a través de local dentro de foreach, esperando reemplazar $_ para los iteradores, olvidando que foreach ya define un nuevo $_. El resultado: un filtro no funcional y una lógica de iteración incorrecta.


Historia

La variable global del paquete no se declaró con our, y el intento de localización mediante local $var provocó la caída del script debido a strict y warnings, y la depuración tomó un día.