• Publicidad

Error: 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.

Re: Error: Not an ARRAY reference

Notapor Redpunkpower » 2012-05-17 06:01 @292

¡YA ME FUNCIONA! He usado la segunda opción y va perfecto. Muchas gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$xml = new XML::Simple (KeyAttr=>[]);
    $data = $xml->XMLin("CJT_D.xml", ForceArray => ['Cabecera']);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Ahora lo que quiero hacer es que el archivo lo tenga que escribir yo, es decir un STDIN pero al cambiar el nombre del archivo por <> o <STDIN> me pide el archivo pero se queda pillado pidiéndome el nombre una y otra vez y si lo dejo en blanco tampoco acaba.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Archivo: \n";
  2. $data = $xml->XMLin( <>, ForceArray => ['Cabecera'] );
  3. last if !$data;
  4.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Redpunkpower
Perlero nuevo
Perlero nuevo
 
Mensajes: 35
Registrado: 2012-05-08 09:37 @442

Publicidad

Re: Error: Not an ARRAY reference

Notapor explorer » 2012-05-17 06:24 @308

El asunto no es tan sencillo... Cuando pones '<>' le estás pidiendo que lea desde la entrada estándar, hasta que encuentre un final de archivo.

Si la entrada la estás escribiendo tu, la marca de fin de fichero depende del sistema operativo que estés usando. En la mayor parte de los sistemas actuales se hace con Control+D.

En ese momento, la entrada pasará a XMLin(), que admitirá tanto XML como el nombre de un archivo a procesar. En el primer caso (le estás pasando código XML) lo leerá sin problemas. Pero para el segundo caso, sí que hay problemas: si has pulsado la tecla de Enter (o Entrar o Retorno de carro), el nombre del archivo vendrá acompañado de ese/los carácter/caracteres que marcan el final de línea. Así que no podrá encontrar ese archivo porque no coincide con lo que le has escrito (el archivo en el disco no tendrá esos caracteres al final).

Lo mejor... hacer las cosas por separado.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "Archivo a procesar (Q para terminar): ";
my      $archivo_xml = <>;      # leemos
chomp   $archivo_xml;           # quitamos el retorno de carro
exit if $archivo_xml eq 'Q';    # salimos

my $data = $xml->XMLin( $archivo_xml, ForceArray => ['Cabecera'] );
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

Anterior

Volver a Básico

¿Quién está conectado?

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