• Publicidad

Duda con "use" en Perl

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

Duda con "use" en Perl

Notapor fgalves » 2007-05-24 08:31 @396

Hola a todos,

El caso es que tengo un script en el que hago uso de una serie de "packages" (perl modules) externos. Dichos "perl modules" los declaro mediante la instrucción "use package;" al principio del código.

El problema que tengo es simple: el script funciona únicamente si dichos Perl modules se encuentran en el mismo directorio, es decir, visibles por el script que los utiliza.

Si lanzo dicho script desde otro directorio (diferente al de los perl modules), el script no funciona ya que no encuentra dichos packages.
¿Cómo puedo hacer para que mi script pueda funcionar desde cualquier directorio?

He intentado usar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use lib '/camino/../MDW_1_2.pm';
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

y tambien con:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use lib '/camino/../MDW_1_2';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero ninguna de las dos formas parece funcionar... :cry:

¿Alguien me puede echar una mano?
¡Muchas gracias!
¡Saludos!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Publicidad

Notapor fgalves » 2007-05-24 08:42 @404

Me respondo a mi mismo: hago un "use lib" para declarar el directorio donde estan los perl modules, y mantengo los "use package" originales.
Gracias a todos!!!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor fgalves » 2007-05-24 08:54 @413

Vuelvo a la carga:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
error("Environment variable \$ENV_ROOT not defined.\n", 100) unless defined $ENV{"ENV_ROOT"};
my $env_root = $ENV{"ENV_ROOT"};

my $chemin = $env_root.'/FqStatsDecodingPlugins/Plugins/';

use lib $chemin;   <span style="font-weight: bold">#LINEA 15</span>

use CACHE_1_0;
use CACHE_2_0;
use EDI_1_0;
use EDI_1_1;
use EXT_1_0;
use EXT_1_1;
use INP_1_0;
use INP_1_1;
use MDW_0_0;
use MDW_1_1;
use MDW_1_2;
use PRI_0_0;
use PRI_0_1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y a cada ejecucion me trago los siguientes mensajes de error (o warnings, la verdad es que no estoy seguro):

Código: Seleccionar todo
Use of uninitialized value in string eq at /usr/perl5/5.8.4/lib/sun4-solaris-64int/lib.pm line 30.
Empty compile time value given to use lib at printDecodedLine.pl line 15
Use of uninitialized value in -e at /usr/perl5/5.8.4/lib/sun4-solaris-64int/lib.pm line 37.
Use of uninitialized value in concatenation (.) or string at /usr/perl5/5.8.4/lib/sun4-solaris-64int/lib.pm line 97.
Use of uninitialized value in concatenation (.) or string at /usr/perl5/5.8.4/lib/sun4-solaris-64int/lib.pm line 98.
Use of uninitialized value in concatenation (.) or string at /usr/perl5/5.8.4/lib/sun4-solaris-64int/lib.pm line 99.
Use of uninitialized value in concatenation (.) or string at /usr/perl5/5.8.4/lib/sun4-solaris-64int/lib.pm line 100.
Use of uninitialized value in hash element at /usr/perl5/5.8.4/lib/sun4-solaris-64int/lib.pm line 60.
Use of uninitialized value in require at printDecodedLine.pl line 17.
Use of uninitialized value in require at printDecodedLine.pl line 18.
Use of uninitialized value in require at printDecodedLine.pl line 19.
Use of uninitialized value in require at printDecodedLine.pl line 20.
Use of uninitialized value in require at printDecodedLine.pl line 21.
Use of uninitialized value in require at printDecodedLine.pl line 22.
Use of uninitialized value in require at printDecodedLine.pl line 23.
Use of uninitialized value in require at printDecodedLine.pl line 24.
Use of uninitialized value in require at printDecodedLine.pl line 25.
Use of uninitialized value in require at printDecodedLine.pl line 26.
Use of uninitialized value in require at printDecodedLine.pl line 27.
Use of uninitialized value in require at printDecodedLine.pl line 28.
Use of uninitialized value in require at printDecodedLine.pl line 29.


Alguien ve lo que esta pasando?

Muchas gracias!
Saludos!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2007-05-24 09:16 @428

El use es en tiempo de COMPILACIÓN, mientras que $chemin lo defines en tiempo de EJECUCIÓN.

No puedes usar use lib $chemin;, porque en el momento de la compilación $chemin está vacío, y de ahí sale la primera línea de error.

Debes usar require.
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 Perl user » 2007-05-24 10:18 @471

Usa un bloque BEGIN, perldoc perlmod

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor fgalves » 2007-05-25 01:21 @098

Muchas gracias Explorer!
He cambiado el "use lib" por los "require" y funciona a la perfeccion!!
He entendido perfectamente tu explicacion y te la agradezco mucho!

Saludos!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor fgalves » 2007-05-25 04:27 @227

Gracias "Perl User" por tus indicaciones!
Por cierto Perl User, ya estuve en Guadalajara (Mexico) y tienes suerte de vivir en una ciudad tan bonita. Mi mujer tambien es de Jalisco (Puerto Vallarta), y vamos alla una vez cada 2 años mas o menos para ver a su familia, y siempre aprovechamos para pasar por Guadalajara.

Un cordial saludo!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621


Volver a Básico

¿Quién está conectado?

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

cron