Perl en Español

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

Problemas con @INC

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Mie Oct 15, 2008 9:04 am
losweberos
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Oct 2008
Mensajes: 17
Problemas con @INC Responder citando

Buenas, creo que esta consulta va aquí, porque, al menos a mi se me va de madre, con perdón por la expresión.

Bueno comienzo, como ya comenté soy nuevo en esto de Perl y me ha caído un proyecto en él, lo que trae la ventaja de aprender este lenguaje que cada vez me gusta más, pero me tiene algo "despistado". El tema es que ya me han dejado los fuentes, y al montar el servidor de pruebas, me encuentro que los módulos creados por la gente que los desarrolló están en un directorio dentro del servidor web, sin embargo, y pese a que todos los scripts usan como mínimo uno de sus módulos, en ninguno de ellos se añade la ruta a @INC, tras preguntarle al santo ( si, Google ) no he encontrado forma de configurarlo en el servidor ( me parece lógico ) y solo una de hacerlo en Perl ( recompilarlo modificado ), y aquí surge mi duda:
- ¿Realmente tengo que recompilarlo?, en caso negativo, ¿qué alternativa hay?
- Si no hay más remedio que recompilar, ¿dónde puedo alguna guía sencilla? No sé C...

Imagino que la mejor opción es "retocar" la aplicación, pero no la tengo permitida.

Muchas gracias por la atención y un saludo.
Mensaje Mie Oct 15, 2008 9:10 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

Por defecto Perl busca módulos en las rutas puesta en @INC y en el directorio desde donde se está ejecutando la aplicación.

De esta manera, podrías poner los módulos dentro del mismo directorio que el script que los va a llamar, sin la necesidad de tener que modificar @INC.

Otra opción, es el uso de
Perl:
use lib('/ruta/a/modulos');
Mensaje Mie Oct 15, 2008 9:29 am
losweberos
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Oct 2008
Mensajes: 17
Responder citando

Ante todo gracias por la pronta respuesta, pero el problema no es ese, el tema es que tengo montones de cgi que empiezan, por ejemplo:

Perl:
#!/usr/bin/perl

use Trazas;

....


Estos scripts están en el directorio [SERVER_ROOT]/cgi-bin, sin embargo Trazas.pm se encuentra en el directorio [SERVER_ROOT]/lib. Para colmo no puedo contemplar como opción añadir

Perl:
push @INC, '.';


en cada script ( lo que me parece la forma lógica ), y tengo que mantener su estructura de directorios...

Espero que de esta forma quede mejor expresado ( la verdad es que ya no se si expongo bien lo que me pasa por la cabeza ).

Gracias de nuevo por la atención.
Mensaje Mie Oct 15, 2008 9:31 am
losweberos
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Oct 2008
Mensajes: 17
Responder citando

Perdón, donde pongo:

Perl:
push @INC, '.';


quiero poner:

Perl:
push @INC, '/lib';
Mensaje Mie Oct 15, 2008 9:33 am
losweberos
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Oct 2008
Mensajes: 17
Responder citando

Lo que pretendo decir es que no puedo retocar todos los scripts ya creados, disculpad por la cantidad de Post para algo tan sencillo...
Mensaje Mie Oct 15, 2008 9:41 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Recuerda que puedes borrar y editar tus propios mensajes pulsando en los botones que hay a la derecha.

Puedes colocar los módulos en alguno de los directorios de @INC.

O jugar con los enlaces simbólicos de Unix para que @INC los encuentre.

O definir la variable de entorno PERL5LIB con el directorio donde están.

...
Mensaje Jue Oct 16, 2008 3:08 am
losweberos
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Oct 2008
Mensajes: 17
Responder citando

Muchas gracias por la respuesta, no he conseguido borrar los Post, imagino que por estar respondidos, pero para otra ya lo sé, disculpad.

En cuanto a las soluciones que propone explorer, los módulos he de colocarlos dónde los tengo ( donde hay patrón... ), por lo que la solución de moverlos no me es posible ( ya me gustaría ), la opción de los enlaces simbólicos es una solución en el entorno que nos estamos montando nosotros, pero más adelante tendremos que montar un entorno dónde, tal vez, no podamos arreglarlo así.

La tercera me parece la más adecuada, pero estoy teniendo un problema con ella. He probado creando y ajustando la variable de entorno PERL5LIB, de manera que, haciendo un perl -V da como que mi directorio está en PERL5LIB y en @INC:

Código:
  %ENV
    PERL5LIB="/opt/metrolan/libgen"
  @INC:
     /opt/metrolan/libgen
     /etc/perl
     /usr/local
     /lib/perl/5.8.8
     /usr/local/share/perl/5.8.8
     /usr/lib/perl5
     /usr/share/perl5
     /usr/lib/perl/5.8
     /usr/share/perl/5.8
     /usr/local/lib/site_perl
    .



sin embargo al ejecutar el CGI me da un 500 "Internal Server" y el log dice:

Código:
Can't locate Entorno.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /opt/metrolan/cgi-bin/inicio.pl line 5.
BEGIN failed--compilation aborted at /opt/metrolan/cgi-bin/inicio.pl line 5.
[Thu Oct 16 10:40:15 2008] [error] [client 172.22.21.65] Premature end of script headers: /opt/metrolan/cgi-bin/inicio.pl


El archivo Entorno.pm se encuentra en /opt/metrolan/libgen, como habréis imaginado, he probado a reiniciar la máquina Linux dónde está todo por si acaso, pero el resultado es el mismo.

Muchas gracias de nuevo por la atención.
Mensaje Jue Oct 16, 2008 4:03 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Debes modificar el entorno (variables de entorno) del servidor web que ejecutas en la máquina, para que tenga exportada la variable PERL5LIB.

En Apache, por ejemplo, se hace con la directiva SetEnv.
Mensaje Jue Oct 16, 2008 8:43 am
losweberos
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Oct 2008
Mensajes: 17
Responder citando

Gracias, lo solucioné así.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group