• Publicidad

Crear xml a partir de un tmpl

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

Crear xml a partir de un tmpl

Notapor tammyrey » 2009-04-15 09:34 @440

¡Hola! Soy nueva en ese foro... espero colocar mi duda en el lugar adecuado...

Tengo un archivo rss.pl, un archivo de configuración config.conf y una plantilla plantilla.tmpl. Cuando ejecuto en la línea de comandos perl rss.pl config.conf debe crearse un xml usando la plantilla plantilla.tmpl y rellenándola con los datos que aparecen en config.conf.

El trozo de código que se encarga de escribir el xml es el siguiente:

open( FILE, ">$outFile" ) or die "can't open $outFile";
print FILE $feed->output();
close FILE;


pero la línea del print() me da el siguiente error:

not found! at rss.pl line 62s.pl: HTML::Template::Pro:template plantilla.tmpl

La variable $feed; es un array que contiene todos los datos que necesita la plantilla.

La verdad es que no sé que ocurre ni por qué me aparece eso de not found! y luego pone en la línea 62s.pl (imagino que eso de s.pl no forma parte del error y se refiere a la línea 62, que es la del print)... ¿¿¿¿alguien me podría ayudar, por favor???? ¡Gracias de antemano a todos!
tammyrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-04-15 09:30 @437

Publicidad

Notapor explorer » 2009-04-15 09:46 @448

Bienvenido a los foros de Perl en Español, tammyrey.

El error que muestras lo genera la línea 305 del módulo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
carp "HTML::Template::Pro:template $filename not found!"  unless $filepath;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
que parece que indica que no ha podido encontrar la plantilla.

Prueba a indicar el camino completo a la plantilla, en el momento de crear el $feed.
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

Notapor tammyrey » 2009-04-15 09:51 @452

¡¡¡Gracias por tu ayuda!!! :D

Mira, cuando creo el $feed pongo lo siguiente:

my $feed = HTML::Template::Pro->new( filename => $config{"tmpl"} );

He probado a poner plantilla.tmpl en vez de tmpl solo... y cuando hago eso me dice:

bad arguments: expected filename or scalarref

¿¿Alguna idea?? ;)
tammyrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-04-15 09:30 @437

Notapor explorer » 2009-04-15 11:11 @507

Pero... ¿cuánto vale $config{tmpl}?
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

Notapor tammyrey » 2009-04-15 11:14 @510

Vale plantilla.tmpl , por eso me extraña que no la encuentre. ¡¡¡¡Está en el mismo directorio!!!!
tammyrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-04-15 09:30 @437

Notapor explorer » 2009-04-15 11:28 @520

Quizás el problema es que, aunque esté en el mismo directorio, el directorio de ejecución no sea el mismo.

Es un concepto de UNIX: un programa puede estar en un sitio. El usuario en otro. Y el programa, cuando arranca, puede ir a otro.

Ejemplo. Si tengo un programa en

/var/lib/cgi-bin/programa.pl

el usuario user podría estar en

/home/user

entonces, podría ejecutarlo sin más que poner el camino completo en la línea de comandos.

Una vez arrancado el programa, la primera instrucción podría ser

chdir /var/tmp/

por lo que el programa estaría funcionando en ese directorio.

Mi recomendación es que pruebes a poner, en lugar de solo plantilla.tmpl, el camino (path) a ella. Algo así como /var/home/usuario/desarrollo/plantilla.tmpl.

El módulo Cwd te puede decir dónde se está ejecutando el programa.

Otra idea es la de ejecutar el programa paso a paso, con el depurador, y ver qué valores tiene el programa, dónde se está ejecutando, etc.
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

Notapor tammyrey » 2009-04-15 11:47 @532

Después de muchas pruebas he visto cual es el culpable:

$config("tmpl")

Es extraño, pero si pongo:

my $feed = HTML::Template::Pro->new( filename => "plantilla.tmpl" );

en vez de:

my $feed = HTML::Template::Pro->new( filename => $config{"tmpl"} );

¡¡¡Funciona a la perfección!!! He probado a guardar el valor de $config("tmpl") en una variable y ponerla en vez de plantilla.tmpl, pero tampoco funciona...

Sííí, he probado a ponerle el path y más cosas.... algo así:

my $feed = HTML::Template::Pro->new(
filename => $config{"tmpl"},
die_on_bad_params => 1,
global_vars => 1,
case_sensitive => 1,
loop_context_vars => 1, # enable: __first__, __last__, __inner__, __odd__, __counter__
path => ["/kohaclone/misc/cronjobs/rss"]
);


pero nada... la única solución fue poner el nombre de la plantilla directamente.
tammyrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-04-15 09:30 @437

Notapor explorer » 2009-04-15 11:58 @540

Pues sí que es raro, sí...

Yo, si quisiera saber qué pasa, lo ejecutaría paso a paso con el depurador integrado (perl -d) para ver, dentro del módulo, porqué no encuentra la plantilla.

Lo malo es que al ser un módulo con parte compilada en C, es un poco más compleja su depuración.
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

Notapor tammyrey » 2009-04-15 12:01 @542

Además... aún no tengo demasiados conocimientos de Perl... lo que voy haciendo es poner warn() e ir mirando en la consola, en el Apache, los resultados... para ver el valor de las variables, los errores... y esas cosas...

¡¡¡¡Muchísimas gracias por tu ayuda explorer!!!! Da gusto que un moderador responda tan rápido y con conocimientos :)

Tendré que seguir investigando... porque no es normal, y con ese archivo tendré que crear distintos xml, así que no me vale usar plantilla.tmpl así directamente, debería ser una variable...

¡Gracias!
tammyrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2009-04-15 09:30 @437

Notapor explorer » 2009-04-15 12:46 @573

Lo normal, si el código es más o menos corto, y si la licencia lo permite, es que en estos foros también se publique el código que falla, para ver si podemos identificarlo.

Pero bueno, con los warn() y con CGI::Carp otros métodos, también se puede resolver.
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

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron