• Publicidad

Empleo de ficheros .pm

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

Empleo de ficheros .pm

Notapor jmdelcampo » 2011-03-10 11:00 @500

Buenas tardes,

He creado una librería .pm que quiero emplear en un script .pl
Cuando ejecuto el script me aparece el siguiente error:

Can't locate loadable object for module infovista in @INC (@INC contains: /usr/local/ActivePerl-5.6/lib/5.6.1/sun4-solaris-thread-multi /usr/local/ActivePerl-5.6/lib/5.6.1 /usr/local/ActivePerl-5.6/lib/site_perl/5.6.1/sun4-solaris-thread-multi /usr/local/ActivePerl-5.6/lib/site_perl/5.6.1 /usr/local/ActivePerl-5.6/lib/site_perl .)

¿Qué debo hacer para poder utilizar la librería?
Saludos y gracias
jmdelcampo
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2006-11-24 07:43 @363

Publicidad

Re: Empleo de ficheros .pm

Notapor explorer » 2011-03-10 11:22 @515

Quizás tu programa no sepa dónde está esa biblioteca.

Fíjate que te salen todos los subdirectorios en donde Perl busca por ella. El último donde va a mirar es en el propio directorio donde te encuentras ('.').

Puedes usar

use lib 'directorio';

para indicar dónde está.
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

Re: Empleo de ficheros .pm

Notapor jmdelcampo » 2011-03-10 11:48 @533

Gracias, explorer.

Como ves, tengo copiado el fichero .pm en todos los directorios que contiene @INC

./usr/local/ActivePerl-5.6/lib/5.6.1/sun4-solaris-thread-multi/infovista.pm
./usr/local/ActivePerl-5.6/lib/5.6.1/infovista.pm
./usr/local/ActivePerl-5.6/lib/site_perl/5.6.1/sun4-solaris-thread-multi/infovista.pm
./usr/local/ActivePerl-5.6/lib/site_perl/5.6.1/infovista.pm
./usr/local/ActivePerl-5.6/lib/site_perl/infovista.pm


y como me indicabas he puesto la ruta donde está el fichero .pm
use lib '/opt/InfoVista/Essentials/sdk/perl/5.6/site/lib' y al ejecutar obtengo el siguiente mensaje

Undefined subroutine &infovista::init called

La única forma en la que me funciona es ejecutándolo en el mismo directorio, pero no pueden residir ambos ficheros en el mismo directorio.

Saludos y gracias.
jmdelcampo
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2006-11-24 07:43 @363

Re: Empleo de ficheros .pm

Notapor explorer » 2011-03-10 12:15 @552

No se te ocurra poner el módulo en cada directorio. Déjalo en solo UN sitio. Y si ese sitio no es uno de los directorios que @INC conoce, debes usar el 'use lib'.

En cuanto al error que sale ahora, dice que se ha intentado ejecutar el método init() dentro del módulo infovista, pero que no está definida por ninguna parte.

Sería interesante que intentaras crear un programa, muy pequeño, que reprodujera el mismo error, y lo publicaras aquí, para ver si podemos identificar dónde puede estar el error.

¿No será que el módulo infovista depende de otros módulos?

Sin más información, es difícil saber qué puede estar pasando.
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

Re: Empleo de ficheros .pm

Notapor jmdelcampo » 2011-03-11 05:45 @281

Hola,

He dejado el script en un solo sitio como puedes ver
XXXXXX:/> find . -name libreria.pm
./opt/.../sdk/perl/5.6/site/lib/libreria.pm


el script lo tengo en XXXXXX:/> find . -name prueba_libreria.pl
./opt/.../sdk/perl/5.6/site/prueba_libreria.pl


A continuación escribo al código de prueba_libreria.pl

use lib '/opt/.../sdk/perl/5.6/site/lib/libreria';
libreria::init();


:/opt/.../sdk/perl/5.6/site> perl prueba_libreria.pl
Undefined subroutine &libreria::init called at prueba_libreria.pl line 4.


¿Sería posible instalar la librería como cualquier .pm descargado de CPAN?

Saludos y gracias
jmdelcampo
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2006-11-24 07:43 @363

Re: Empleo de ficheros .pm

Notapor explorer » 2011-03-11 07:12 @342

En el 'use lib' no debes poner la ruta completa la librería, sino la ruta completa al directorio que contiene la librería.

Así:

use lib '/opt/.../sdk/perl/5.6/site/lib/';

Y luego tienes que cargarla:

use libreria;

Si el directorio '/opt/.../sdk/perl/5.6/site/lib/' es uno de los que contiene la variable @INC (compruébalo con el comando perl -V), entonces no te hace falta poner el 'use lib'. Lo que hace 'use lib' es añadir el directorio que le pasas como argumento, a la variable @INC.

Y luego, lo siguiente más importante, es cargarla, con 'use libreria;'.

Como casi siempre, hasta que no publicas el código del programa, no nos damos cuenta de qué es lo que puede pasar.

jmdelcampo escribiste:Can't locate loadable object for module infovista in @INC (@INC contains: /usr/local/ActivePerl-5.6/lib/5.6.1/sun4-solaris-thread-multi /usr/local/ActivePerl-5.6/lib/5.6.1 /usr/local/ActivePerl-5.6/lib/site_perl/5.6.1/sun4-solaris-thread-multi /usr/local/ActivePerl-5.6/lib/site_perl/5.6.1 /usr/local/ActivePerl-5.6/lib/site_perl .)

Acabo de darme cuenta de que este error quiere decir que el módulo infovista necesita de una biblioteca externa (un fichero .so, .dll, etc) que DynaLoader no puede cargar.

Así que, además de colocar el .pm, debes colocar esa librería.

Te recomiendo que leas las instrucciones de instalación de dicha librería.
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

Re: Empleo de ficheros .pm

Notapor jmdelcampo » 2011-03-11 07:47 @365

Muchas gracias, explorer,
¡¡Lo he logrado!!
jmdelcampo
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2006-11-24 07:43 @363


Volver a Básico

¿Quién está conectado?

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

cron