Problema en perl con Hash

Iniciado por Ocelot1994, 23 Abril 2017, 16:25 PM

0 Miembros y 1 Visitante están viendo este tema.

Ocelot1994

Hola buenas, tengo un problema a la hora de eliminar determinado valor de hash con su clave y valor correspondientes. He buscado y lo normal sería utilizar la clausula delete de está manera:
Código (perl) [Seleccionar]

my %hashMap;
$hashMap{"A"} = 1;
$hashMAp{"B"} = 2;
#Si quiero borrar un valor de este ejemplo, me basta con:
delete $hashMap{"A"};
#Y me borra la clave "A" y el valor 1.

El problema que tengo es a la hora de trabajar con el hashMap ya que utilizo el módulo struct porque necesito otros tipos de datos y para trabajar es más sencillo, esto funcionaría de la siguiente manerar:
Código (perl) [Seleccionar]

struct( scalar => '$', a => '@', hashMap => '%', class => 'My_Other_Class' );
$obj = new Myobj;
#Para definir una clave valor lo unico que tengo que hacer es:
$obj->hashMap("A" , 1);
$obj->hashMap("B" , 2);
#Y para obtener el valor;
$obj->hashMap("A");
#Ahora bien, si quiero borrar lo logico seria esto:
delete $obj->hashMap("A"); #Pero justo aqui falla

Como veis al hacer el delete sobre esa referencia me falla. El error que me muestra el compilador es que delete no puede borrar un objeto que no es un hash, o array.
Por eso mi duda es como hacer para poder borrar esa clave/valor de mi hashMap.
Dejo aqui el modulo struct por si alguien no lo conoce: http://perldoc.perl.org/Class/Struct.html

Espero que me podais ayudar , muchas gracias.
Un saludo

explorer

Debes hacer lo siguiente: debes obtener una referencia al hash subyacente, de esta manera:

my $hash_ref = $obj->hashMap();

Y ahora ya puedes borrar ese elemento:

delete $hash_ref->{A};

Fíjate en lo que dice el manual, en la sección «Element Types and Accessor Methods», en el apartado Hash.


Ocelot1994

Todo correcto, ya puedo borrar gracias a ti.
Muchas gracias y un saludo