/ / ¿Cómo puedo no definir el valor para una clave hash en Perl? - perl, hash

¿Cómo no estoy definido el valor de una clave hash en Perl? - perl, hash

Me gustaría saber cómo deshacer la definición del valor de una clave hash en Perl. ¿Podría alguien corregir mi código?

#!/usr/bin/perl

use strict;
use warnings;
my %hash;


undef($hash{"a"});
undef($hash{"b"});
print scalar values %hash; # i need here 0
print scalar keys %hash; # and here 2

Respuestas

4 para la respuesta № 1

El punto de la otra respuesta sobre la definición frente a la existencia es muy bueno, pero si realmente hacer ¿Quieres saber el número de valores definidos que siempre puedes hacer?

print scalar grep { defined $_ } values %hash

8 para la respuesta № 2
undef($hash{"a"});

es equivalente a

$hash{"a"}=undef;

Entonces se agrega clave "a" con valor undef. Para eliminar el valor del hash use "delete".

delete $hash{"a"};

No es posible tener diferentes tamaños de "claves" y "valores" para el mismo hash. Puedes usar grep para filtrar elementos no deseados.


2 para la respuesta № 3
undef $hash{$key};

Esto anulará el valor de esta clave:

print "E" if exists $hash{$key};    # will print E
print "D" if defined $hash{$key};   # will not print D