Perl suele quedarse con la memoria que va ocupando, pues no sabe si la va a necesitar varias veces a lo largo de la ejecución del programa.
También depende mucho del sistema operativo y de la versión Perl que estés usando. ¿Cuáles son?
Un
array es un sistema muy efectivo para guardar una pila de información, pero si usas un
array con "huecos" (índices del
array sin usar), en esos casos, en algunas aplicaciones es mejor usar un
hash.
Si tú, como programador, quieres decirle a Perl que quieres que ese
array se quede a como estaba en su declaración (que no contenga nada de nada), debes poner
Using perl Syntax Highlighting
undef @vector;Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Comentarios a tu código:
my @vector=(); es lo mismo que
my @vector;@vector=(); no "elimina" ni "libera" la memoria del
array, sino que le estamos diciendo que queremos que @vector sea un
array de cero elementos (no tiene elementos, pero
sigue siendo un
array con "algo").
print="@vector[500]"; contiene dos errores: el '=' y el '@'.
Después de hacer el map{} de todos los elementos a undef(), seguimos teniendo un
array de n elementos (los mismos que antes), pero todos con valor undef (vamos, que no estamos recortando el número de elementos).
Editado: Al final de
este hilo (perlmonks.org) te dan una explicación mucho más detallada del proceso de liberación, que depende del tamaño de bloque que se pueda liberar. Pone el siguiente ejemplo: si reservas un bloque de 100MB, es candidato a ser liberado en cuanto deje de ser usado. Pero si reservas 100MB en bloques de 100 bytes, no será liberado nunca.
Pero lo principal es usar variables léxicas locales con my() dentro de los contextos que las necesitan, pues, cuando se terminan esos contextos, son candidatos a ser liberados por el recolector de basura.