• Publicidad

Not an ARRAY reference

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

Not an ARRAY reference

Notapor adrian_sla » 2011-08-19 10:37 @484

¡¡¡Hola!!!

Tengo el siguiente código

if ( $xml_res->{response}->{status} eq 'success' and $xml_res->{response}->{isAvailable} eq 'Y' ) {
my $arref = \@{ $xml_res->{response}->{ratesFound}->{rate} };
for ( my $i = 0 ; $i < @{$arref} ; $i++ ) {
if ( @{$arref}[$i]->{invSource} && @{$arref}[$i]->{roomTypeCode} && @{$arref}[$i]->{ratePlanCode} ) {
my %hash = (
invSource => @{$arref}[$i]->{invSource},
roomTypeCode => @{$arref}[$i]->{roomTypeCode},
ratePlanCode => @{$arref}[$i]->{ratePlanCode}
);

return %hash;
}
}
}


La línea marcada en rojo me devuelve el error "Not an array reference".
Por lo que entiendo, está casteando un hash a un array. ¿Es posible hacer eso?

Desde ya, ¡muchas gracias!
¡Un saludo!
Última edición por explorer el 2011-08-19 10:42 @487, editado 1 vez en total
Razón: Poner caracteres '¡' y tildes que faltan
adrian_sla
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-12-28 09:35 @441

Publicidad

Re: Not an ARRAY reference

Notapor explorer » 2011-08-19 10:59 @499

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $arref = \@{ $xml_res->{response}->{ratesFound}->{rate} };
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
quiere decir: "$xml_res->{response}->{ratesFound}->{rate} contiene una referencia a un array. Con el 'cast' @{} obtenemos el array referenciado, y con el '\' obtenemos una referencia a ese array, para almacenarlo en el escalar $arref".

Humm... me parece que el programador se ha liado un poco :lol:

A lo mejor queda más claro así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $arref = $xml_res->{response}->{ratesFound}->{rate};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
o más corto, así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $arref = $xml_res->{response}{ratesFound}{rate};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y de esa manera, $arref apunta al mismo array que $xml_res->{response}->{ratesFound}->{rate}.

El mensaje de error dice que, al intentarlo, se ha encontrado con que $xml_res->{response}->{ratesFound}->{rate} no contiene ninguna referencia a ningún array. O no es una referencia (quizás un valor escalar normal) o un valor indefinido (undef) o, realmente, no existe $xml_res->{response}->{ratesFound}->{rate}.

El código está un poco enmarañado... yo lo pondría así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (   $xml_res->{response}{status     } eq 'success'
  2.    and $xml_res->{response}{isAvailable} eq 'Y'
  3. ) {
  4.     for my $item_ref ( @{$xml_res->{response}{ratesFound}{rate}} ) {
  5.         if (   $item_ref->{invSource   }
  6.            and $item_ref->{roomTypeCode}
  7.            and $item_ref->{ratePlanCode}
  8.         ) {
  9.             my %hash = (
  10.                 invSource    => $item_ref->{invSource   },
  11.                 roomTypeCode => $item_ref->{roomTypeCode},
  12.                 ratePlanCode => $item_ref->{ratePlanCode},
  13.             );
  14.  
  15.             return %hash;
  16.         }
  17.     }
  18.  
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


Volver a Básico

¿Quién está conectado?

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