array
,
variables hash
,
nombres de subrutinas,
formatos,
ficheros y directorios.
Cada uno de estos objetos tiene su propio espacio de nombres.
Un cambio en el valor de uno de estos tipos de objetos (por ejemplo, escalar) no afecta en absoluto
el valor de otro tipo de objeto (por ejemplo, lista) que tenga el mismo nombre. Asi pues
una modificación de la
variable escalar $a
no afecta a la variable array
con el mismo
nombre @a
.
No siempre puede considerarse que es mal estilo de programación el utilizar esta independencia en el espacio de nombres para dar a dos variables diferentes el mismo nombre. Obsérvese el siguiente código que muestra los usuarios de un sistema Unix que casan con la expresión regular dada como argumento en la línea de comandos:
lhp@nereida:~/Lperl/src$ cat -n samenamespace.pl 1 #!/usr/bin/perl -w 2 use strict; 3 my $user = shift; 4 $user = '.*' unless defined($user); 5 6 die "can't find /etc/passwd\n" unless -r "/etc/passwd"; 7 my @user = grep {/$user/i } `cat /etc/passwd`; 8 9 foreach $user (@user) { 10 my ( $name ) = split ':', $user, 2; 11 print "$name\n"; 12 }La llamada a
shift
de la línea 2 actúa sobre el
array especial @ARGV
. Este array contiene
la lista de argumentos pasados en la línea de comandos.
El operador -r devuelve TRUE
si el fichero
con ese nombre es de lectura (línea 6).
Casiano Rodríguez León