my
:
sub min { my $a = shift; # igual que shift @_ my $b = shift; ($a < $b)? $a : $b }Estas variables tienen como ámbito el bloque que las rodea. Cualesquiera otras variables
$a
y $b
no se ven afectadas
por los cambios que les hagamos a estas.
Observe que se ha suprimido el punto y coma de la última sentencia. Al igual que en Pascal, en perl es legal hacerlo asi.
Las variables léxicas pueden declararse en cualquier bloque, no es obligatorio que sea el bloque de una subrutina.
Si no esta dentro de ningún bloque, el ámbito de la variable será el fichero actual.
El operador my
no implica ningún contexto en particular.
Por ejemplo:
my ($num) = @_; # contexto de lista my $num = @_; # contexto escalar
¿Que valores quedan almacenados en $num
en cada caso?