Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Ocelot1994 en 23 Abril 2017, 16:25 pm



Título: Problema en perl con Hash
Publicado por: Ocelot1994 en 23 Abril 2017, 16:25 pm
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
  1.  
  2. my %hashMap;
  3. $hashMap{"A"} = 1;
  4. $hashMAp{"B"} = 2;
  5. #Si quiero borrar un valor de este ejemplo, me basta con:
  6. delete $hashMap{"A"};
  7. #Y me borra la clave "A" y el valor 1.
  8.  
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
  1.  
  2. struct( scalar => '$', a => '@', hashMap => '%', class => 'My_Other_Class' );
  3. $obj = new Myobj;
  4. #Para definir una clave valor lo unico que tengo que hacer es:
  5. $obj->hashMap("A" , 1);
  6. $obj->hashMap("B" , 2);
  7. #Y para obtener el valor;
  8. $obj->hashMap("A");
  9. #Ahora bien, si quiero borrar lo logico seria esto:
  10. delete $obj->hashMap("A"); #Pero justo aqui falla
  11.  
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


Título: Re: Problema en perl con Hash
Publicado por: explorer en 24 Abril 2017, 22:01 pm
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.



Título: Re: Problema en perl con Hash
Publicado por: Ocelot1994 en 25 Abril 2017, 01:20 am
Todo correcto, ya puedo borrar gracias a ti.
Muchas gracias y un saludo