• Publicidad

Crear una tabla hash con otras estructuras dentro

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Crear una tabla hash con otras estructuras dentro

Notapor Eowyn » 2011-06-04 09:19 @429

Hola,

lo primero, gracias por este foro, seguro que ayuda a muchas personas.

Mi problema:

He empezado con Perl y no lo controlo. Tengo un fichero Kaf, algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
<text>
<wf wid="w1" sent="s1">Casa</wf>
<wf wid="w2" sent="s1">:</wf>
<wf wid="w3" sent="s2">una</wf>
<wf wid="w4" sent="s2">vivienda</wf>
<wf wid="w5" sent="s2">digna</wf>
<wf wid="w6" sent="s2">.</wf>
.
.
.

<terms>
<!-- Casa -->
<term tid="t1" type="open" lemma="casa" pos="N.IZE-ARR" case="ABS">
<span>
<target id="w1"/>
</span>
</term>
<!-- una -->
<term tid="t2" type="open" lemma="una" pos="G.ADJ-ARR" case="ABS">
<span>
<target id="w3"/>
</span>
</term>
<!-- vivienda -->
<term tid="t3" type="close" lemma="vivienda" pos="C.LOT-JNT">
<span>
<target id="w4"/>
</span>
</term>
<!-- digna -->
<term tid="t4" type="open" lemma="digna" pos="G.ADJ-ARR" case="ABS">
<span>
<target id="w5"/>
</span>
</term>
.
.
.
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Necesito crear una tabla hash cuya clave sea el campo "pos". Por ejemplo, "pos=G.ADJ-ARR", y que dentro de la tabla hash, en la clave que le corresponda haya una linked list que contenga un registro dentro con tres campos: "tid", "pos" y "wid" (w1, w2...). A su vez, el campo "wid" debe contener un vector con 3 posiciones.

Es decir:

my %Tabla_Hash = ("Clave"=> Linked_List(Registro[tid, pos, Wid:vector]))

No encuentro cómo definir ésto "Linked_List(Registro[tid, pos, Wid:vector]" y lo poco que encuentro no lo entiendo. De hecho no encuentro ni cómo definir un registro :(

¿Alguien puede ayudarme? :oops:

Otra opción que se me ocurre es:

my %Tabla_Hash=("Clave"=> Linked_List(String))

y que esa string sea de este tipo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
<term tid="t4" type="open" lemma="digna" pos="G.ADJ-ARR" case="ABS">
<span>
<target id="w5"/>
</span>
</term>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero no sé ni cómo pasar todo eso a String ni cómo conseguir "cortar" cada uno de ellos del archivo xml.

Gracias de antemano.
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Publicidad

Re: Crear una tabla hash con otras estructuras dentro

Notapor explorer » 2011-06-04 12:25 @559

Bienvenida a los foros de Perl en español, Eowyn.

En Perl sí que se pueden construir listas enlazadas, pero es una estructura que se ve muy poco en los programas Perl, porque los arreglos (arrays, vectores, o matrices unidimensionales) son uno de los tipos de datos integrados en el lenguaje. Y con ellos se pueden realizar (casi) todas las operaciones básicas de las listas enlazadas.

De la estructura que quieres hacer, yo lo único que no veo es cómo construir el vector wid. Dices que son 3 posiciones, pero no cómo se construyen.

En cuanto al análisis del xml, veo que tiene una estructura sencilla, así que se podría realizar en base a tratarlo línea a línea y/o expresiones regulares.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear una tabla hash con otras estructuras dentro

Notapor Eowyn » 2012-04-08 12:46 @573

Hola, me siguen surgiendo dudas respecto a este tema. Seguro que es simple, pero se está conviertiendo en una locura :cry:

Al final decidí hacer una estructura con una tabla hash y dentro un vector.

Tabla_Hash(Clave, @vectorvacío)

Me da varios errores. El primero es que no parece gustarle que la clave tenga puntos y guiones, tipo "N.IZE-ARR" y no tengo opción a poner otra clave porque es justo ése el tipo de clave a tratar. Estoy utilizando además algo de Xpath y lo controlo aún menos que Perl, así que me da error al abrir un archivo y no veo el porqué.

Pongo el código que falla:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use XML::XPath;
  5. use XML::XPath::XMLParser;
  6.  
  7.     my @term_array;     #defino un array vacío
  8.    
  9.     my %Moten_Hash_Taula = ('N.IZE-ARR' => @term_array);#creo la tabla hash, no sé si bien, con un sólo elemento de prueba.
  10.  
  11.     print($Moten_Hash_Taula{'N.IZE-ARR'}); #pruebo a ver si hace algo, pero da error.
  12.     print("Escriba el nombre del archivo:");
  13.     my $archiv =<STDIN>;
  14.  
  15.     my $xpth = XML::XPath->new(filename => $archiv); #quiero leer el archivo pero da error;
  16.  
  17.     my $nodeset = $xpth->find('/KAF/terms'); # busco "term" en el fichero kaf(tipo el del mensaje anterior)
  18.  
  19.     foreach my $node ($nodeset->get_nodelist) {
  20.  
  21.         my $term= XML::XPath::XMLParser::as_string($node); #saco la info del nodo como string
  22.  
  23.                 my $clave=/pos=".+"/;
  24.                 print $clave; #no escribe nada tampoco
  25.                 %Moten_Hash_Taula[$clave]= push(@term_array,$term); #trato de meter el término convertido a string en la tabla hash, en esa clave dentro de su vector
  26.  
  27.     }
  28.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Los primeros errores son estos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Odd number of elements in hash assignment at Urko_Hash_Taula_Kargatu line 9.
Use of uninitialized value $Moten_Hash_Taula{"N.IZE-ARR"} in print at Urko_Hash_Taula_Kargatu line 11.
Escribe el nombre del archivo: proba.kaf.xml
Cannot open file 'proba.kaf.xml
' at /usr/share/perl5/XML/XPath.pm line 53, <STDIN> line 1.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Para aclarar más, trato de hacer lo siguiente:

  • Sacar mediante xpath un nodo term como los del fichero del primer mensaje, éste por ejemplo, convertido en string:

    tid="t1" type="open" lemma="casa" pos="N.IZE-ARR" case="ABS">
    <span>
    <target id="w1"/>
    </span>
  • Ir a la table Hash y en la clave "N.IZE-ARR" meter esa string dentro de un vector inicialmente vacío.
  • Cuando consiga hacerlo con uno, hacerlo con los demás terms, cada uno en la clave que le toca

Espero que haya por dónde cogerlo y agradezco mucho su ayuda.
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Re: Crear una tabla hash con otras estructuras dentro

Notapor explorer » 2012-04-08 13:10 @590

Los errores quieren decir lo siguiente:
Odd number of elements in hash assignment at Urko_Hash_Taula_Kargatu line 9.
«En una asignación hash, has intentado pasar un número impar de elementos.»

Los hashes son pares clave/valor, y lo que has escrito, no es así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     my %Moten_Hash_Taula = ('N.IZE-ARR' => @term_array);#creo la tabla hash, no sé si bien, con un sólo elemento de prueba.
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Estás asignando una lista de valores a una sola clave. Por el error, sabemos que @term_array contiene un número par de elementos, ya que, sumados a la clave 'N.IZE-ARR', nos da un número impar, y de ahí, el error. Es más: si se diese la coincidencia de @term_array contuviese un número impar de elementos, Perl no sacaría el error... pero tu programa seguiría estando mal... porque lo que, en realidad quieres poner ahí es
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     my %Moten_Hash_Taula = ('N.IZE-ARR' => \@term_array); # creo la tabla hash
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Tomamos la referencia al array con el '\' y eso nos devuelve un valor escalar, y eso es lo que almacenamos como valor, asociado a la clave.

Más información en tu propio ordenador en perldoc perlref, y en la Web (traducido).

Más información en tu propio ordenador en perldoc perldsc, y en la Web (traducido).


Use of uninitialized value $Moten_Hash_Taula{"N.IZE-ARR"} in print at Urko_Hash_Taula_Kargatu line 11.
«Estás usando un valor no inicializado de $Moten_Hash_Taula{"N.IZE-ARR"}»

Quiere decir que, en realidad, no has guardado nada ahí. Así que print() se encuentra con que quieres sacar algo, de donde no hay nada. Por defecto, print() sacará un cadena de caracteres vacía, que es lo normal en estos casos, pero como también es normal que cuando eso sucede es que hemos metido la pata, nos avisa (porque están activos los warnings).

Cannot open file 'proba.kaf.xml
' at /usr/share/perl5/XML/XPath.pm line 53, <STDIN> line 1.

«No puedo abrir el archivo 'proba.kaf.xml

Fíjate (aunque no lo veas): justo detrás de 'xml' hay un carácter de avance de línea. Perl ha intentado buscar un archivo con un carácter de fin de línea, y claro, no lo ha encontrado. Ese carácter viene del usuario, al pulsar la tecla Entrar en su teclado. En la mayor parte de las ocasiones, no nos sirve para nada, así que lo normal es quitarlo. Justo después de la lectura, en la línea 14, pon:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.      chomp $archiv;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
que se encargará de quitar ese (o esos) caracteres.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear una tabla hash con otras estructuras dentro

Notapor explorer » 2012-04-08 14:18 @637

Dado que el xml es sencillo, se puede, como se ha comentado antes, intentar resolverlo mediante la utilización de expresiones regulares. De hecho, en tu código, también las utilizas.

Supongamos un xml así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <text>
  2.     <wf wid="w1" sent="s1">Casa</wf>
  3.     <wf wid="w2" sent="s1">:</wf>
  4.     <wf wid="w3" sent="s2">una</wf>
  5.     <wf wid="w4" sent="s2">vivienda</wf>
  6.     <wf wid="w5" sent="s2">digna</wf>
  7.     <wf wid="w6" sent="s2">.</wf>
  8. </text>
  9. <terms>
  10.     <!-- Casa -->
  11.     <term tid="t1" type="open" lemma="casa" pos="N.IZE-ARR" case="ABS">
  12.         <span>
  13.             <target id="w1"/>
  14.         </span>
  15.     </term>
  16.     <!-- una -->
  17.     <term tid="t2" type="open" lemma="una" pos="G.ADJ-ARR" case="ABS">
  18.         <span>
  19.             <target id="w3"/>
  20.         </span>
  21.     </term>
  22.     <!-- vivienda -->
  23.     <term tid="t3" type="close" lemma="vivienda" pos="C.LOT-JNT">
  24.         <span>
  25.             <target id="w4"/>
  26.         </span>
  27.     </term>
  28.     <!-- digna -->
  29.     <term tid="t4" type="open" lemma="digna" pos="G.ADJ-ARR" case="ABS">
  30.         <span>
  31.             <target id="w5"/>
  32.         </span>
  33.     </term>
  34. </terms>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
entonces, con un programa así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. use strict;
  4. use warnings;
  5. use diagnostics;
  6.  
  7. use File::Slurp;
  8. use Data::Dumper::Simple;
  9.  
  10. ## Leemos el fichero xml
  11. my $xml = read_file('kk.xml');          # Leemos al archivo
  12.  
  13. ## Leemos la parte de <text>
  14. my %text;                               # Entradas de texto
  15.  
  16. while ($xml =~ m{<wf wid="(?<wid>\w+)" sent="(?<sent>\w+)">(?<token>.+?)<}gsm) {
  17.     $text{$+{wid}} = { sent => $+{sent}, token => $+{token} };
  18. }
  19.  
  20. say Dumper %text;
  21.  
  22. ## Leemos la parte de <terms>
  23. my %Moten_Hash_Taula;                   # Hash final
  24.  
  25. while ($xml =~ m{(<term tid="(?<tid>\w+)".+? pos="(?<pos>.+?)")}gsm) {  # Para todos los 'term'
  26.     $Moten_Hash_Taula{$+{pos}}
  27.         = {
  28.             tid => $+{tid},
  29.             pos => $+{pos},
  30.             wid => [1, 2, 3],
  31.         };
  32. }
  33.  
  34. say Dumper %Moten_Hash_Taula;
  35.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
el resultado es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
%text = (
          'w4' => {
                    'sent' => 's2',
                    'token' => 'vivienda'
                  },
          'w3' => {
                    'sent' => 's2',
                    'token' => 'una'
                  },
          'w5' => {
                    'sent' => 's2',
                    'token' => 'digna'
                  },
          'w1' => {
                    'sent' => 's1',
                    'token' => 'Casa'
                  },
          'w6' => {
                    'sent' => 's2',
                    'token' => '.'
                  },
          'w2' => {
                    'sent' => 's1',
                    'token' => ':'
                  }
        );

%Moten_Hash_Taula = (
                      'N.IZE-ARR' => {
                                       'wid' => [
                                                  1,
                                                  2,
                                                  3
                                                ],
                                       'pos' => 'N.IZE-ARR',
                                       'tid' => 't1'
                                     },
                      'C.LOT-JNT' => {
                                       'wid' => [
                                                  1,
                                                  2,
                                                  3
                                                ],
                                       'pos' => 'C.LOT-JNT',
                                       'tid' => 't3'
                                     },
                      'G.ADJ-ARR' => {
                                       'wid' => [
                                                  1,
                                                  2,
                                                  3
                                                ],
                                       'pos' => 'G.ADJ-ARR',
                                       'tid' => 't4'
                                     }
                    );
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Lo que no sabemos son el contenido del vector 'wid'. Dices que deben contener tres valores, pero no nos has dicho cuáles son. Lo he puesto de momento 1, 2 y 3.

Como ves, se trata de hash que almacena hashes, y que uno de los valores es un array.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear una tabla hash con otras estructuras dentro

Notapor Eowyn » 2012-04-08 16:02 @710

Gracias por su respuesta. El aspecto de las "wid" decidí eliminarlo momentáneamente porque me daba más problemas aún.

He conseguido arreglar cómo abrir el archivo. Gracias :D En cambio, el tema de los array y las paridades no lo entiendo bien. Poniendo "\@terms" sigue dándome el mismo error.

Como decía, no lo entiendo bien. Mi intención es hacer una hash que tenga su clave y que cada clave me lleve a un array vacío que debo ir llenando.

Me parece entender que no puedo hacer nada porque depende del número de elementos del vector que funcione o no.

¿He entendido bien si pienso que no puede hacerse directamente una tabla hash con un vector dentro de ella y que solamente puede tener una clave y un valor escalar y que fuera de ello aquel valor escalar referencie a un array?

Ya ve que estoy más perdida de lo que debería.

Le envío un archivo sobre la estructura que tengo en mente y que, espero haber entendido mal, no sé puede crear.

Gracias por su paciencia, habría desistido de no ser por éste foro.
Adjuntos
estruc.png
estruc.png (42.69 KiB) Visto 1020 veces
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Re: Crear una tabla hash con otras estructuras dentro

Notapor explorer » 2012-04-08 19:10 @840

Tienes que aprender a hacer esquemas con ascii-art, en lugar de poner una imagen ;) Ocupa menos :)

Sí que se puede crear esa estructura:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Data::Dumper::Simple;
  3.  
  4. my %Moten_Hash_Taula = (
  5.     'N.IZE-ARR' => [ 'term1', 1, 2, 'term2', 3, 4, 'term3', 5, 6, ],
  6.     'P.IZE-ORO' => [ 'term1', 1, 2, 'term2', 3, 4, 'term3', 5, 6, ],
  7.     'N.ADL'     => [ 'term1', 1, 2, 'term2', 3, 4, 'term3', 5, 6, ],
  8.     'V.ADI-SIN' => [ 'term1', 1, 2, 'term2', 3, 4, 'term3', 5, 6, ],
  9.     'V.AL-A'    => [ 'term1', 1, 2, 'term2', 3, 4, 'term3', 5, 6, ],
  10.     'V.ADL-SIN' => [ 'term1', 1, 2, 'term2', 3, 4, 'term3', 5, 6, ],
  11. );
  12.  
  13. print Dumper %Moten_Hash_Taula;
  14.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
La salida es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
%Moten_Hash_Taula = (
                      'V.ADI-SIN' => [
                                       'term1',
                                       1,
                                       2,
                                       'term2',
                                       3,
                                       4,
                                       'term3',
                                       5,
                                       6,
                                     ],
                      'N.IZE-ARR' => [
                                       'term1',
                                       1,
                                       2,
                                       'term2',
                                       3,
                                       4,
                                       'term3',
                                       5,
                                       6,
                                     ],
                      'V.AL-A' => [
                                    'term1',
                                    1,
                                    2,
                                    'term2',
                                    3,
                                    4,
                                    'term3',
                                    5,
                                    6,
                                  ],
                      'V.ADL-SIN' => [
                                       'term1',
                                       1,
                                       2,
                                       'term2',
                                       3,
                                       4,
                                       'term3',
                                       5,
                                       6,
                                     ],
                      'N.ADL' => [
                                   'term1',
                                   1,
                                   2,
                                   'term2',
                                   3,
                                   4,
                                   'term3',
                                   5,
                                   6,
                                 ],
                      'P.IZE-ORO' => [
                                       'term1',
                                       1,
                                       2,
                                       'term2',
                                       3,
                                       4,
                                       'term3',
                                       5,
                                       6,
                                     ]
                    );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pero entonces te quedan los 'term', junto con las posiciones, todo seguidos. Quizás... quedaría mejor así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Data::Dumper::Simple;
  3.  
  4. my %Moten_Hash_Taula = (
  5.     'N.IZE-ARR' => { 'term1' => [ 1, 2 ], 'term2' => [ 3, 4 ], 'term3' => [ 5, 6 ], },
  6.     'P.IZE-ORO' => { 'term1' => [ 1, 2 ], 'term2' => [ 3, 4 ], 'term3' => [ 5, 6 ], },
  7.     'N.ADL'     => { 'term1' => [ 1, 2 ], 'term2' => [ 3, 4 ], 'term3' => [ 5, 6 ], },
  8. );
  9.  
  10. print Dumper %Moten_Hash_Taula;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
que sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
%Moten_Hash_Taula = (
                      'N.IZE-ARR' => {
                                       'term3' => [
                                                    5,
                                                    6
                                                  ],
                                       'term2' => [
                                                    3,
                                                    4
                                                  ],
                                       'term1' => [
                                                    1,
                                                    2
                                                  ]
                                     },
                      'N.ADL' => {
                                   'term3' => [
                                                5,
                                                6
                                              ],
                                   'term2' => [
                                                3,
                                                4
                                              ],
                                   'term1' => [
                                                1,
                                                2
                                              ]
                                 },
                      'P.IZE-ORO' => {
                                       'term3' => [
                                                    5,
                                                    6
                                                  ],
                                       'term2' => [
                                                    3,
                                                    4
                                                  ],
                                       'term1' => [
                                                    1,
                                                    2
                                                  ]
                                     }
                    );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

La estructura es: un hash cuyas claves son los 'pos'. Cada valor asociado referencia a un hash, cuyas claves son los 'term', y los valores son referencias a un array, que contiene la información asociada.

Si queremos acceder a un determinado valor, podemos hacer:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Acceso al segundo elemento del 'term2' correspondiente a 'P.IZE-ORO'
  2. print $Moten_Hash_Taula{'P.IZE-ORO'}{'term2'}[1], "\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
... un objeto de tres dimensiones... ¡y sin gafas 3D! 8)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear una tabla hash con otras estructuras dentro

Notapor Eowyn » 2012-04-12 10:43 @488

¡Gracias!

Creo que lo he entendido. Una hash sólo puede tener dos valores, por eso no puedo poner la clave y luego un vector que no sé cuántos tiene. Entonces, tengo que poner la clave y LA DIRECCIÓN del vector y tratar ese vector aparte.

Entendido éso he creado finalmente una hash que tiene (clave,\array) porque lo del 3D es too much for me, de momento :( Además me expliqué tremendamente mal y, a pesar de ser cierto que la palabra "term" aparece en todos los string que quiero usar, no es para nada una clave, sino simplemente la palabra con la que casualmente comienzan todos los string.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @array
  2. my %Moten_Hash_Taula = ("N.IZE-ARR" => \@array,
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Una vez que tengo la clave en $clave y la cadena que necesito guardada en $term, quiero actualizar el vector correspondiente a esa clave haciendo un push(@array, $term), pero no sé cómo conseguir el "@array". Me da error al tratar de hacer ésto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $Moten_Hash_Taula{"$clave"};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y me da error porque no sé si debo poner:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @array = $Moten_Hash_Taula{"$clave"};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

o bien
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $array = $Moten_Hash_Taula{"$clave"};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Es decir, que no sé exactamente qué devuelve $Moten_Hash_Taula{"$clave"} y por tanto no sé qué poner delante de esa igualdad ni cómo acceder al vector que quiero actualizar.

explorer, te agradezco enormemente tu ayuda y paciencia y te pido perdón por mi abuso de ella. Es imprescindible que entregue el proyecto de fin de carrera y cuando me "atasco" me desespero. Lo habría dejado de no ser por este foro. :cry:
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Re: Crear una tabla hash con otras estructuras dentro

Notapor explorer » 2012-04-12 16:17 @720

Si $Moten_Hash_Taula{"$clave"} nos devuelve una referencia a un array,
entonces @{ $Moten_Hash_Taula{"$clave"} } nos devuelve los elementos de ese array.

Si quieres acceder al segundo elemento del array:

$Moten_Hash_Taula{"$clave"}->[1] = 42;
print $Moten_Hash_Taula{"$clave"}->[1];


Si quieres extraer todos los elementos:

my @array = @{ $Moten_Hash_Taula{"$clave"} };

Agregar nuevos valores:

push @{ $Moten_Hash_Taula{"$clave"} }, 42;

Lo mismo para shift, pop, unshift...

Lo tienes TODO contado en perldsc (traducido), perllol (traducido) y perlref (traducido).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear una tabla hash con otras estructuras dentro

Notapor Eowyn » 2012-04-17 04:10 @215

Gracias por la paciencia.

Creo que lo que atañe a este tópico está solucionado. Ahora tengo los problemas que me vienen desde Xpath :( A ver si lo consigo, ¡muchas gracias!
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados