Tipo de objeto y ámbito

Existe siete tipos de objetos con nombre en Perl: variables escalares, variables 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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19