Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Undefined subroutine &main::???

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos
Mensaje Sab Oct 18, 2008 7:36 pm
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 246
Ubicación: Colombia
Undefined subroutine &main::??? Responder citando

Tengo este mensaje:

Código:
Software error:
Undefined subroutine &main::fkread called at E:\O'Telch\Sitios web\bitacora\riocauca\panel.pl line 49.

Mi módulo es FILE::kreader;
Cuando mi módulo lo llamo así:

Perl:
#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:all);
use lib('../modulos');

print header;

#use CGI::Session;
use HTML::Template;
use Data::Dumper;
use HTML::CalendarMonth;
use FILE::kreader;


Y dentro de mi módulo tengo esto:

Perl:
package FILE::kreader;

use strict;

require Exporter;


{   no strict;

   @ISA = qw(Exporter);
   @EXPORT_OK = qw(makefile swrite cfind fwrite fedit fkread kread);

}


Y cuando comento la primera línea de mi módulo

Perl:
#package FILE::kreader;

use strict;

require Exporter;


{   no strict;

   @ISA = qw(Exporter);
   @EXPORT_OK = qw(makefile swrite cfind fwrite fedit fkread kread);

}


Obtengo esto:

Código:
Software error:
FILE/kreader.pm did not return a true value at E:\O'Telch\Sitios web\bitacora\riocauca\panel.pl line 13.


Y para rematar, si importo desde mi código la función que tengo en mi módulo:
Perl:
use FILE::kreader qw(fkread);


Eso sí... le quito el comentario a package FILE::kreader; la primera línea de mi módulo y obtengo esto:

Código:
Software error:
Undefined subroutine &FILE::kreader::fkread called at E:\O'Telch\Sitios web\bitacora\riocauca\panel.pl line 49.


Pero si comento la primera línea de mi módulo y llamo a mi módulo así:

Perl:
use FILE::kreader qw(fkread);


obtengo esto

Código:
Software error:
FILE/kreader.pm did not return a true value at E:\O'Telch\Sitios web\bitacora\riocauca\panel.pl line 13.


La verdad no sé qué pasó si mi módulo ha funcionado super bien, solo agregué una nueva función llamada fkread, y tiene el número 1 al final mi módulo también.
Mensaje Sab Oct 18, 2008 8:52 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Parece un fallo de sintaxis, quizás en alguna línea anterior a la definición de la subrutina.

usa strict, warnings y diagnostics, a ver si te cuentan algo más...
Mensaje Sab Oct 18, 2008 9:10 pm
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 246
Ubicación: Colombia
Responder citando

No, no me sale nada más y usé todo lo que me sugieres. Solo me sale

Código:
Undefined subroutine &FILE::kreader::fkread called at E:\O'Telch\Sitios web\bitacora\riocauca\panel.pl line 49.


y es todo. La subrutina está bien escrita... borré incluso todas las demás hasta dejar la subrutina vacía, es decir, sub fkread{};

Mejor dicho, esto es lo que tengo en mi módulo:

Perl:
package FILE::kreader;

use strict;

require Exporter;


{   no strict;

   @ISA = qw(Exporter);
   @EXPORT_OK = qw(makefile swrite cfind fwrite fedit fkread kread);

}

#########################################

#Kreader para Manipular ficheros y sus campos
#Autor Name: Daniel Mera
#Nick: 100% Telch
#Pais: Colombia
#Email: danimera@hotmail.com
#Version: 1

#########################################

sub fkread{
};

1;
Mensaje Sab Oct 18, 2008 9:15 pm
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 246
Ubicación: Colombia
Responder citando

Aveces obtengo esto cuando no lo exporto del módulo:

Código:
 "fkread" is not exported by the FILE::kreader module


pero si lo exporto desde el módulo:

Código:
Undefined subroutine &FILE::kreader::fkread called at
Mensaje Sab Oct 18, 2008 10:21 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Con lo siguiente me funciona:

programa.pl:
Perl:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use kreader qw(fkread);

fkread(9);

kreader.pm:
Perl:
#!/usr/bin/perl

package kreader;

require Exporter;

use strict;

our @ISA       = qw(Exporter);
our @EXPORT_OK = qw(fkread);

sub fkread{
    print "@_\n";
};

1;

Estoy casi convencido de que se trata de un error de sintaxis...
Mensaje Dom Oct 19, 2008 1:41 am
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 246
Ubicación: Colombia
Responder citando

Sí... es un error de sintaxis aunque aun no veo dónde está... pero debe estar fuera del módulo; miraré a ver qué logro.
Mensaje Dom Oct 19, 2008 10:27 am
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 246
Ubicación: Colombia
Responder citando

AL FIN LO LOGRÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉ

TODO LO MÍO ESTABA BIEN. EXPLORER... el problema fue que use el optiperl y al parecer cuando subía o guardaba los archivos me quedaron unos caracteres extraños que solo pude ver con un editor de texto en consola. Borré estos caracteres y creé un archivo nuevo, copié y pegué mi código fuente y listo. Jejeje, me funcionó bien ^^


GRACIAS POR TODO... AVECES NOS PASAN ESTAS COSAS.
Mensaje Dom Oct 19, 2008 10:54 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Sería interesante saber qué caracteres eran y si estaban en alguna determinada posición, por si alguien más usa ese programa y le pase lo mismo...
Mensaje Lun Oct 20, 2008 6:38 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Quizá el problema no era el editor, sino el programa FTP que estaba subiendo el archivo al servidor como Binario y no como ASCII.
Mensaje Jue Oct 23, 2008 11:56 am
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 246
Ubicación: Colombia
Responder citando

No... lo subía bien... lo que pasa es que cuando lo subía era que cambia la ruta del intérprete Perl... entonces ese era un problema. Ese archivo lo subía desde el mismo programa editor.

El otro eran unos caracteres muy extraños al inicio del archivo algo como: ╝♫╖ y todos los saltos de línea me los convertía en algo raro... esto en el Optiperl... Claro que es porque usé una versión crackeada y no de pago ^^ así que si tienen problemas similares mirar que el archivo no tenga caracteres extraños.
Mensaje Jue Oct 23, 2008 12:33 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Suena a un preámbulo UTF-8 estricto junto con una transmisión ascii... Smile
Mensaje Vie Oct 24, 2008 11:10 pm
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 246
Ubicación: Colombia
mmmm Responder citando

¿Eso qué significa, ha? ¿?¿?
Mensaje Sab Oct 25, 2008 7:59 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Se trata de la Marca de orden de bytes (BOM, Byte Order Mark), que suele aparecer en algunos documentos codificados en UTF-8.

En cuanto a los finales de línea, quizás estés viendo los finales propios de Windows (\r\n) que son distintos de los de Unix/Linux (\n) y a su vez, distinto de los de Mac (\r).

Por eso solían ser útiles las transmisiones ascii con FTP, porque se encargaban de hacer esa transformación de los finales de línea.

Lo que pasa es que hoy en día, los ficheros de "texto" suelen tener caracteres codificados de muchas formas, por lo que pueden confundirse con los caracteres de final de línea. Por eso hoy se transmite todo en binario. Y por eso la mayoría de los editores de textos y programas tienen una opción para elegir los caracteres de final de línea.

Revisa la configuración de tu Optiperl, para que trabaje con la correspondiente a tu servidor, no a la del ordenador donde estás trabajando.
Mensaje Sab Oct 25, 2008 9:38 am
danimera
Perlero Adicto
Perlero Adicto
Registrado: 23 Jun 2005
Mensajes: 246
Ubicación: Colombia
Responder citando

Huy, gracias por eso. Ahora ya entiendo, miraré la configuración de Optiperl ^^
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group