Página 2 de 3

Re: Error: Not a GLOB reference

NotaPublicado: 2012-05-25 09:26 @434
por explorer
Pues no lo sé... pero viendo las líneas que has publicado antes, me temo que no has mostrado el archivo correcto, ya que el error dice que la línea que ha fallado es la 10, y en tu archivo, esa línea no muestra nada ejecutable.

¿Seguro que has mostrado las primeras líneas de 'U:/Perl/site/lib/XML/SAX/PurePerl/Reader/UnicodeExt.pm'?

Re: Error: Not a GLOB reference

NotaPublicado: 2012-05-28 02:47 @158
por Redpunkpower
Sí, pero eso ya está arreglado. Lo borré y lo volví a instalar y lo tengo igual que el tuyo, pero el error me sigue saltando...

Pienso que el error está en esta parte.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $data = $archivo_xml->XMLin( $archivo_xml, ForceArray => ['Cabecera'] );
  2. foreach $archivo_xml ( @{ $data->{Cabecera} } ) {
  3.     if ( $operador == $archivo_xml->{OperadorId} ) {
  4.         print "Nombre correcto";
  5.     }
  6.  
  7.     else {
  8.         print "Nombre incorrecto";
  9.     }
  10. }
  11.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Re: Error: Not a GLOB reference

NotaPublicado: 2012-05-28 04:53 @245
por explorer
El código es terrible...

Estás usando $archivo_xml para tres cosas distintas: en la línea 1, dentro de XMLin(), se supone que contiene el nombre del archivo XML que vas a leer, pero al mismo tiempo vemos que almacena el objeto XML::Simple que llama a su método XMLin(). Y para rematar, en la línea 2 declaras una nueva variable $archivo_xml para recorrer los valores de @{ $data->{Cabecera} }

Entonces... cuando Perl llega a la línea 3... ¿a qué $archivo_xml nos queremos referir de los tres que has usado antes?

Por favor, da un nombre de variable distinto a cada cosa.

Otra cosa: ¿seguro que la comparación de la línea 3 es con '=='? ¿No será con 'eq'?

Re: Error: Not a GLOB reference

NotaPublicado: 2012-05-28 06:12 @300
por Redpunkpower
en la línea 1, dentro de XMLin(), se supone que contiene el nombre del archivo XML que vas a leer, pero al mismo tiempo vemos que almacena el objeto XML::Simple que llama a su método XMLin().
No entiendo eso.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $data = $archivo_xml->XMLin($archivo_xml, ForceArray => ['Cabecera'] );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

me crea una variable "data", quiero que coja dentro del archivo_xml y dentro del xmlin pongo que en el archivo_xml coja "cabeceras".

Son números lo que quiero que compare, por eso he puesto '=='.

Re: Error: Not a GLOB reference

NotaPublicado: 2012-05-28 07:00 @333
por explorer
Redpunkpower escribiste:en la línea 1, dentro de XMLin(), se supone que contiene el nombre del archivo XML que vas a leer, pero al mismo tiempo vemos que almacena el objeto XML::Simple que llama a su método XMLin().
No entiendo eso.


A ver... en la siguiente línea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     my $data = $archivo_xml->XMLin($archivo_xml, ForceArray => ['Cabecera'] );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Qué contiene el $archivo_xml que está dentro de los paréntesis de XMLin()?
¿Qué contiene el $archivo_xml que está fuera de los paréntesis de XMLin()?

¿No te das cuenta de que deben ser cosas distintas, y por lo tanto, debes usar variables distintas?

Re: Error: Not a GLOB reference

NotaPublicado: 2012-05-28 07:01 @334
por Redpunkpower
El que está fuera indica que quiero que me coja el archivo_xml que es el que contiene todo y en el de dentro quiero que de ese archivo me coja solo "cabeceras".

Re: Error: Not a GLOB reference

NotaPublicado: 2012-05-28 07:53 @370
por explorer
Bien... pero la variable es escalar... (comienza por un '$') luego solo puede contener un único valor...

Por eso, SOLO debe contener un único valor, y por lo tanto, DEBES usar dos variables distintas...

Debes hacer esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $archivo_xml = 'el_archivo_xml_que_quiero_procesar.xml';   # nombre del archivo
  2. my $xml_simple  = XML::Simple->new();                         # creamos un objeto XML::Simple
  3. my $data        = $xml_simple->XMLin($archivo_xml, ForceArray => ['Cabecera'] );   # leemos (¡fíjate en las variables!)
  4.  
  5. for my $cabecera ( @{ $data->{Cabecera} } ) {                 # para todos los datos de la Cabecera
  6.     if ($operador == $cabecera->{OperadorId} ) {              # extraemos su OperadorId
  7.         print "...";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Por favor, observa que usamos una variable DISTINTA por cada información DISTINTA que vamos leyendo. Son cuatro variables, porque guardan cuatro valores distintos.

Otra forma, más simplificada (por poner 'use XML::Simple' al principio):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $archivo_xml = 'el_archivo_xml_que_quiero_procesar.xml';
  2. my $data        = XMLin($archivo_xml, ForceArray => ['Cabecera'] );
  3.  
  4. for my $cabecera ( @{ $data->{Cabecera} } ) {                 # para todos los datos de la Cabecera
  5.     if ($operador == $cabecera->{OperadorId} ) {              # extraemos su OperadorId
  6.         print "...";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Error: Not a GLOB reference

NotaPublicado: 2012-05-28 10:41 @487
por Redpunkpower
He usado la primera opción y va perfecto muchas gracias.

Si en la condición quiero que me compruebe que está en blanco, ¿cómo lo pongo?

he probado con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ( $cabecera->{OperadorId} eq " " ) {
  2.     print "El nombre está incompleto";
  3.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero no me sale lo que yo quiero.

Re: Error: Not a GLOB reference

NotaPublicado: 2012-05-28 11:49 @534
por explorer
No queda muy claro lo que quieres decir con "en blanco". ¿Te refieres a que no tenga ninguna información o que la única información que tenga sea uno o más caracteres espacio en blanco.

Para el primer caso
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (not $cabecera->{OperadorId}) {
  2.     print "El nombre está incompleto";
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

aunque yo pondría más controles, como por ejemplo, la definición y la existencia:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (exists($cabecera->{OperadorId}) and defined($cabecera->{OperadorId}) and $cabecera->{OperadorId}) {
  2.     print "El nombre es $cabecera->{OperadorId}\n";
  3. }
  4. else {
  5.     print "El nombre está incompleto\n";
  6. }
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
bueno, queda más corto así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (exists($cabecera->{OperadorId}) and $cabecera->{OperadorId}) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Ahora bien... si alguna vez $cabecera->{OperadorId} pudiera valer 0 o '0', entonces hay que hacerlo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (defined $cabecera->{OperadorId}) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más información en perldoc -f exists y perldoc -f defined .

Re: Error: Not a GLOB reference

NotaPublicado: 2013-07-10 04:56 @247
por Eowyn
A mí también me aparece este error pero no exactamente así. Leo "Not a GLOB reference at Main line 106"

Siendo el código este:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print("Sar ezazu kargatu nahi duzun fitxategiaren izena: ");
  2. my $fitxategia = <STDIN>;
  3. chomp $fitxategia;
  4. -f $fitxategia or die "Errorea, ezin da $fitxategia aurkitu";
  5. open( my $FITX, $fitxategia );
  6. Hash_Taula_Kargatu($fitxategia);
  7.  
  8. sub Hash_Taula_Kargatu {
  9.  
  10.     my @term_arraya1;                  #arraya hutsa definitu
  11.     my @term_arraya2;
  12.     my $fitxategia       = shift;
  13.     my %Moten_Hash_Taula = (
  14.         "N.IZE-ARR" => \@term_arraya1,
  15.         "G.ADJ-ARR" => \@term_arraya2);
  16.     my $FITX = XML::XPath->new( filename => $fitxategia );
  17.  
  18.     my $nodeset = $FITX->find('/KAF/terms/term');    
  19.     my $gakoa;
  20.  
  21.     foreach my $node ( $nodeset->get_nodelist ) {
  22.         my $term = XML::XPath::XMLParser::as_string($node);
  23.  
  24.         ($gakoa) = $term =~ /pos="(.*?)"/;
  25.         push( @{ $Moten_Hash_Taula{"$gakoa"} }, $term );
  26.  
  27.     }
  28.     while ( my $lerroADI = <$FITX> ) { # aquí parece que da el error
  29.         chomp $lerroADI;
  30.  
  31.         for my $ADIa (@array) {
  32.             if ( $lerroADI eq $ADIa ) {
  33.                 $ADI = 1;
  34.                 last;
  35.             }
  36.         }
  37.     }
  38.  
  39.     if ( $ADI == 1 ) {
  40.         print "Encontrado";
  41.     }
  42.  
  43.     #close $ARCHIVO;
  44. }
  45.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4