De todo lo que he leído sobre el uso de módulos de Perl, el uso básico es:Perl - Paquete Temas/Módulo
- archivo de módulo con
.pm
extensión, que incluye la declaraciónpackage <name>
, donde<name>
es el nombre del archivo de la módulo sin la extensión. - El archivo de código que usa el módulo contiene la instrucción
use <name>;
.
La aplicación que estoy codificando tiene un script de código principal que usa aproximadamente 5 módulos. Había olvidado incluir la declaración package <name>
en los módulos, pero mi código aún funcionaba bien con la declaración use <name>
. Comencé a recibir errores Undefined subroutine
con uno de los módulos, por lo que agregué la declaración del paquete a cada uno de los módulos. Ahora el resto de esos módulos detuvo el funcionamiento de. ¿Lo que da?
Ejemplo:
mainapp.pl
#!/usr/bin/perl
use UtyDate;
my $rowDate = CurrentDate("YYYYMMDD");
UtyDate.pm
#!/usr/bin/perl
package UtyDate;
sub CurrentDate
{
#logic
}
return 1;
Cuando funciono el código anterior, consigo el error Undefined subroutine &main::CurrentDate called at...
. Sin embargo, si elimino la línea package UtyDate;
de UtyDate.pm, no obtengo ningún error. Esta situación existe para varios pero no para todos mis módulos.
Obviamente hay mucho más código que no se muestra, pero estoy confundido sobre cómo el código que no estoy mostrando podría afectar las construcciones de paquete/uso que he mostrado aquí.
OP debería leer ' perlmod' (http://search.cpan.org/perldoc/perlmod) primero como prerrequisito para entender lo que sucede en 'Exporter'. – mob
Gran explicación, gracias. Había visto Exporter usado en algunos de los ejemplos que vi, pero no todos, así que pensé que no estaba relacionado. Echaré un vistazo al doc también mobrule, gracias. – brydgesk