• Publicidad

hashes con arreglos, no me imprime nada :S

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

hashes con arreglos, no me imprime nada :S

Notapor bl4ckc00k1e » 2009-08-16 12:14 @551

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#hashes con arreglos
%rhletras ={
        "latinas"=>["a","b","c"],
        "griegas"=>["alfa","beta","gamma"]
        };
print "$rhletras{latinas}[0]";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Probé también:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "$rhletras{latinas}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y nada, no comprendo cómo puedo decirle, que me imprima todo el arreglo de latinas, o que sólo me saque la "a" de latinas...

Siento preguntar tanto, pero al estar estudiando Perl sin parar a veces mi mente se ofusca y no avanzo más.

P.D. ¿¿Cómo hago para que el source salga con colores en el foro?? Y por cierto, yo estoy programando en el editor de textos de Linux, ¿¿me recomendáis algún programilla que te ayude en algo?? ¿O sigo ahí?
Última edición por explorer el 2009-08-16 12:29 @561, editado 1 vez en total
Razón: Ortografía, bloques de código
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Publicidad

Re: hashes con arreglos, no me imprime nada :S

Notapor bl4ckc00k1e » 2009-08-16 12:45 @573

Resuelto, el fallo era que puse "{" para definir el hash, cuando en realidad, hay que definirlo con "(".
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#hashes con arreglos
%rhletras =(
        "latinas"=>["a","b","c"],
        "griegas"=>["alfa","beta","gamma"]
        );
print "$rhletras{latinas}[0], $rhletras{griegas}[1]\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Gracias a r0j4z0 del IRC de Perl.
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Re: hashes con arreglos, no me imprime nada :S

Notapor explorer » 2009-08-16 12:49 @576

Recuerda que puedes editar tus propios mensajes, pulsando en el botón adjunto a cada mensaje.

En la edición de cada mensaje, hay una botonera de estilos, por debajo de la clásica de negrita, inclinada, etc. Tal como están puestos te colocarán el código según la sintaxis elegida. Pero pueden personalizarse bastante. Solo hay que preocuparse de leerse la sintaxis de etiquetado de la aplicación phpBB2. Pero bueno, con lo que trae por defecto, te vale. Si quieres ver cómo he reeditado alguno de tus mensajes te vale con dar al botón de edición. Con eso verás las distintas marcas que se pueden usar.

En cuanto al problema de los diccionarios, el error está en haber usado llaves en la definición. Si ejecutamos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. #hashes con arreglos
  7. my %rhletras = {
  8.         "latinas" => ["a","b","c"],
  9.         "griegas" => ["alfa","beta","gamma"]
  10. };
  11.  
  12. #print "$rhletras{latinas}[0]";
  13.  
  14. use Data::Dumper;
  15. print Dumper \%rhletras;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

sale
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Reference found where even-sized list expected at ./kk.pl line 7 (#1)
    (W misc) You gave a single reference where Perl was expecting a list
    with an even number of elements (for assignment to a hash). This usually
    means that you used the anon hash constructor when you meant to use
    parens. In any case, a hash requires key/value pairs.

        %hash = { one => 1, two => 2, };        # WRONG
        %hash = [ qw/ an anon array / ];        # WRONG
        %hash = ( one => 1, two => 2, );        # right
        %hash = qw( one 1 two 2 );                      # also fine

$VAR1 = {
          'HASH(0x81ce1a8)' => undef
        };
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Fíjate qué majo es el Perl que nos está avisando que estamos usando una referencia ({}) donde él esperaba encontrar una lista de valores de tamaño par, en la línea 7. Esto sale porque he usado el warnings y el diagnostics. Te dice luego qué es lo que tienes que hacer: usar paréntesis. Y además, te pone ejemplos.

Vamos a hacerle caso:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my %rhletras = (
  7.     latinas => [   'a',    'b',     'c'],
  8.     griega  => ['alfa', 'beta', 'gamma'],
  9. );
  10.  
  11. use Data::Dumper;
  12. print Dumper \%rhletras;
  13.  
  14. print $rhletras{latinas}[0], "\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$VAR1 = {
          'latinas' => [
                         'a',
                         'b',
                         'c'
                       ],
          'griega' => [
                        'alfa',
                        'beta',
                        'gamma'
                      ]
        };
a
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Ya tenemos un diccionario (hash) de arreglos (arrays). Y sale la 'a'.
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: hashes con arreglos, no me imprime nada :S

Notapor bl4ckc00k1e » 2009-08-16 13:10 @590

¡¡¡QUE GUAPO!!! Gracias explorer, tengo una mini duda: con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Data::Dumper;
print Dumper \%rhletras;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Por qué pones \%rhletras? ¿no te vale con %rhletras?

A partir de ahora usaré siempre warnings y diagnostics.
Imagen
Avatar de Usuario
bl4ckc00k1e
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-08-14 21:56 @956

Re: hashes con arreglos, no me imprime nada :S

Notapor explorer » 2009-08-16 13:25 @601

Haz tu mismo la prueba, para ver qué sale :)

De todas formas, yo prefiero usar Data::Dumper::Names. Sale más bonito.
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


Volver a Básico

¿Quién está conectado?

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

cron