Mie May 23, 2007 3:49 am
|
 |
aLiSH
Perlero Nuevo

|
Registrado: 08 May 2007
Mensajes: 18
|
|
| Ayuda con error 'undefined subroutine' |
|
|
Hola!
Llevo poco tiempo con Perl y estoy probando unas subrutinas que escribí. Me encuentro con el siguiente error, que no entiendo muy bien a que se debe:
| bash: | Undefined subroutine &main::save_result called at |
En la línea del error está:
| Perl: | save_result ($obj,$form,$outfileformat,$name); |
y la función es la siguiente (dentro llama a otras funciones y me temo que el error pueda ser a las referencias de las variables):
| Perl: | sub save_result {
my ($result, $form, $ext, $name) = @_;
my $today = strftime "%Y_%m_%d", localtime;
my $now = strftime "%H_%M_%S", localtime;
# get path information
chdir '/tmp/';
scandir ();
my $folder= 'results';
check_folder ($folder,\@ $dirlist);
chdir './results/';
scan_dir ();
# check if today user's folder already exists
$folder= ''. $name. '_'. $today. '';
check_folder ($folder, $dirlist);
# write result into a file, $form, $name, $now
chdir(''. $name. '_'. $today. '');
my $filename = 'result_'. $form. '_'. $name. '_'. $now. '.'. $ext. '';
open (FILENAME, ">$filename");
write (FILENAME, $result);
close(FILENAME );
} |
Las otras funciones a las que llama son las siguientes:
| Perl: | sub scandir {
my $dir = '.'; # actual dir
opendir(DIR, $dir) || die "can't opendir $dir: $!";
my @list = readdir (DIR );
foreach $item (@list){
push @dirlist, $item if -d "$dir/$item" && $item ne '.' && $item ne '..';
push @filelist, $item if -f "$dir/$item";
}
$dirlist = \ @dirlist;
$filelist = \ @filelist;
return($dirlist, $filelist);
}
sub check_folder {
my ($folder, $dirlist) = @_;
my $i= 0;
my $found= 'FALSE';
$dir_size = @dirlist;
while($found eq 'FALSE' && $i<= $dir_size){
if ($dirlist[$i] eq $folder){
$found= 'TRUE';
}
$i++;
}
if ($found eq 'FALSE') {
mkdir $folder;
}
} |
Os agradecería cualquier idea o ayuda para resolverlo.
Un saludo. |
|
|
|

Mie May 23, 2007 4:07 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
| ¿Está la llamada a la función en el mismo fichero que su definición? |
|

Mie May 23, 2007 4:29 am
|
 |
aLiSH
Perlero Nuevo

|
Registrado: 08 May 2007
Mensajes: 18
|
|
|
|
|
No, en el fichero que llama a la función, al principio, he puesto:
| Perl: | do './perl_functions.pl'; |
Donde se encuentran definidas todas las subrutinas. El path estaba incorrecto. Lo he corregido por:
| Perl: | do '../perl_functions.pl'; |
He vuelto a probar y me devuelve otro error:
| bash: | Undefined subroutine &main::scan_dir |
Que indica la línea donde se llama al segundo scan_dir() dentro de la función save_result(). Y me acabo de dar cuenta de que esta mal referenciada porque la función se llama scandir() y no scan_dir()...
Siguiendo con las pruebas y errores, una vez corregido lo anterior, me da otro error:
| bash: | Not a GLOB reference at ../perl_functions.pl line 70. |
donde pone: write (FILENAME, $result);
Aqui ya si que no se me ocurre como solucionarlo. Alguna idea??
Muchas gracias explorer. |
|

Mie May 23, 2007 4:42 am
|
 |
aLiSH
Perlero Nuevo

|
Registrado: 08 May 2007
Mensajes: 18
|
|
|
|
|
Hola de nuevo,
He modificado "write (FILENAME, $result);" por "write (FILENAME, %$result);" ya que la variable $result realmente es un hash. Lo que ocurre es que no me aparece ningún error pero no me escribe o guarda el fichero ya que no lo encuentro ni en la carpeta donde debería guardarlo ni en la carpeta donde esta el script. |
|
Mie May 23, 2007 4:52 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
write() sirve para la salida con un formato definido para el manipulador de fichero FILENAME. ¿Tienes definido un format para FILENAME? ¿No será print FILENAME lo que quieres usar?
Ultima edición por explorer el Lun Sep 01, 2008 4:14 pm, editado 1 vez |
|
Mie May 23, 2007 5:03 am
|
 |
aLiSH
Perlero Nuevo

|
Registrado: 08 May 2007
Mensajes: 18
|
|
|
|
|
Pues igual es esa función... aunque no se como tendría que escribirlo:
print (FILENAME %$result); ??
Muchas gracias. |
|
Mie May 23, 2007 7:33 am
|
 |
aLiSH
Perlero Nuevo

|
Registrado: 08 May 2007
Mensajes: 18
|
|
|
|
|
He probado con "print FILENAME %$result;" y me sigue sin aparecer el archivo. He comprodado que hasta el punto donde comienza a abrir el fichero el script funciona correctamente.
Mi duda es si al ser mi variable a imprimir un hash y al querer que se imprima tal cual, no lo lea o pueda escribir. Estoy leyendo cosas de manejo de ficheros pero no encuentro nada que me pueda ayudar en este caso concreto. Alguna idea?
Un saludo. |
|
Mie May 23, 2007 7:46 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
| Pero es que depende de lo que quieres hacer. ¿Quieres imprimir un hash completo? Puedes usar la función Dump del Data::Dumper; |
|
Mie May 23, 2007 7:51 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
| Pero... ¿en qué lugar del programa actualizas el contenido de la variable $result? Yo no lo veo por ningún lado. |
|
Mie May 23, 2007 7:51 am
|
 |
aLiSH
Perlero Nuevo

|
Registrado: 08 May 2007
Mensajes: 18
|
|
|
|
|
| Si, quiero imprimirlo completo. Probaré con esa funcion. Muchas gracias. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|