Un Array No Inicializado es Vacío

Los escalares no inicializados tienen el valor undef. Sin embargo, las variables array no inicializadas tienen como valor la lista vacía (). Si se asigna undef a una variable de tipo array lo que se obtiene es una lista cuyo único elemento es undef:

@a = undef; # Equivalente a @a = ( undef );
if (@a) { ... } # Por tanto TRUE
El modo mas simple de evitar este tipo de problemas cuando se quiere limpiar una variable de tipo array es asignar explícitamente la lista vacía ():
@a = ();
if (@a) { ...}; # scalar(@a) == 0  es FALSE
También se puede usar el operador undef:
undef @a;
if (defined(@a)) { ... }; # FALSE

Es posible asignar undef a los elementos de un array:

$a[3] = undef;
O bien usando la lista vacía, como se hace en la siguiente sesión con el depurador:
  DB<1>  @a = 0..9
  DB<2> @a[1,5,7] = ()
  DB<3> p "@a"
0  2 3 4  6  8 9
  DB<4> p $#a
9
  DB<5> p scalar(@a)
10
  DB<6> $" = "," # separador de output de arrays
  DB<7> p "@a"
0,,2,3,4,,6,,8,9
  DB<8> @a[1..7] = ()
  DB<9> p "@a"
0,,,,,,,,8,9

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