2010-08-01 23 views
35

Digamos que definimos un hash anónimo como esto:Cómo borrar un hash de Perl

my $hash = {}; 

y luego usar el hash después. Entonces es hora de vaciar o borrar el hash para reutilizar . Después de algunas búsquedas Google, encontré:

%{$hash} =() 

y:

undef %{$hash} 

Ambos servir a mis necesidades. ¿Cuál es la diferencia entre los dos? ¿Son ambas formas idénticas de vaciar un hash?

Respuesta

23

Sí, son absolutamente idénticos. Ambos eliminan las claves y valores existentes de la tabla y configuran el hash en la lista vacía.

Ver perldoc -f undef:

expr undef
undef     Undefines el valor de expr, la cual debe ser un valor-I. Use solamente en un valor escalar, una matriz (usando "@"), un hash (utilizando "%"), una subrutina (usando "&"), o una typeglob (usando "*") ...
Ejemplos:

   undef $foo; 
       undef $bar{'blurfl'};  # Compare to: delete $bar{'blurfl'}; 
       undef @ary; 
       undef %hash; 

sin embargo, no se deben utilizar undef para quitar el valor de nada, excepto un escalar. Para otros tipos de variables, configúrelo en la versión "vacía" de ese tipo, p. para matrices o hashes, @foo =(); %bar =();

+21

Son casi idénticos. después de undef, defined devolverá false, after =(), defined sigue siendo verdadero. – rurban

+0

Creo que la objeción de Rurban a esta respuesta es bastante importante. ¿Tal vez Ether podría actualizar su respuesta para mencionar esa diferencia? – antred

+3

El uso definido (% hash) está en desuso y no debe utilizarse. Entonces la objeción de rurban puede eventualmente ser discutible. De los documentos de Perl para "definido": "El uso de los definidos en los agregados (hashes y matrices) está obsoleto. Solía ​​informar si la memoria para ese agregado se había asignado alguna vez. Este comportamiento puede desaparecer en las versiones futuras de Perl". – PhilHarvey

29

%$hash_ref =(); tiene más sentido que indefinir el hash. Al desactivar el hash, dice que ha terminado con el hash. Asignar una lista vacía dice que solo quiere un hash vacío.

Cuestiones relacionadas