• Publicidad

Devolver una valor de un Hash

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

Devolver una valor de un Hash

Notapor Emstro » 2011-01-19 10:04 @461

Hola, tengo la siguiente función:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub getSectionDescription {
  2.     my $section_code = shift;
  3.     my $dbh          = &EMIS::Database::gethandle('CEICP');
  4.     my $sql          = '';
  5.     my $sth          = undef;
  6.     my $row          = {};
  7.     my $section_name = undef;
  8.  
  9.     if ($dbh) {
  10.        $sql = "   SELECT SECTION_NAME                    \n";
  11.        $sql.= "     FROM LAYOUT_PATHTREE_MVS             \n";
  12.        $sql.= "    WHERE NODE_CODE = '$section_code'     \n";
  13.  
  14.        $sth = $dbh->prepare($sql);
  15.        $sth->execute;
  16. #       foreach ($row = $sth->fetchrow_hashref()) {
  17. #          push @{$section_name}, $row;
  18. #       }
  19.        $sth->finish();
  20.        $dbh = releaseDBHandler($dbh);
  21.        $section_name = $sql;
  22.        return $section_name;
  23.  
  24.     }
  25. }
  26.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y trato de retornar el valor de la siguiente manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $section_name = getSectionDescription($Data->{SECTION_CODE});
  2. @{$section_name}[0]->{SECTION_NAME}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero me da este error cuando ejecuto mi .pl:
Can't use an undefined value as a HASH reference at

No sé qué será, lo he hecho de varia formas pero nada.

Gracias, Saludos.
Emstro
Perlero nuevo
Perlero nuevo
 
Mensajes: 31
Registrado: 2010-11-08 16:12 @716

Publicidad

Re: Devolver una valor de un Hash

Notapor explorer » 2011-01-19 10:52 @494

Las líneas que obtienen el resultado de la consulta las tienes comentadas, por lo que no están ejecutándose. En su lugar, en la línea 21 tienes que $section_name es igual a la cadena de caracteres de la consulta. Así, es normal el error que te salga en pantalla.

Según las líneas comentadas, $section_name es una referencia a un array, en que cada elemento es un hash con correspondencias entre los nombres de las columnas de la tabla resultado de la consulta y el valor de la fila de la tabla.

Así, @{$section_name}[0]->{SECTION_NAME}, aunque quedaría más claro como $section_name->[0]->{SECTION_NAME}, intenta acceder al dato de la primera fila, columna 'SECTION_NAME'.

Deberías descomentar las líneas 16 a 18 y comentar la 21 (o quitarla).

Si quieres ver el aspecto que tiene $section_name, puedes usar a nuestro amigo Data::Dumper (o Data::Dumper:Simple):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Data::Dumper;
  2. print Dumper($section_name);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Devolver una valor de un Hash

Notapor Emstro » 2011-01-19 13:02 @584

Claro, explorer, tienes razón. Se me olvido descomentar esas líneas y comentar la 21 cuando puse este mensaje. Pero el original es el que dices tu, aun así no me recupera el dato.

Probé haciendo la consulta en la base de datos y ese campo está vacío, por eso el error.

SOLUCIONADO.

Gracias, explorer, por tu ayuda y tus comentarios.

Atte. Emstro.
Regards.
Emstro
Perlero nuevo
Perlero nuevo
 
Mensajes: 31
Registrado: 2010-11-08 16:12 @716


Volver a Básico

¿Quién está conectado?

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