• Publicidad

Problemas con @INC

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Problemas con @INC

Notapor losweberos » 2008-10-15 10:04 @461

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.
losweberos
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2008-10-02 03:04 @169

Publicidad

Notapor kidd » 2008-10-15 10:10 @465

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
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use lib('/ruta/a/modulos');
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor losweberos » 2008-10-15 10:29 @478

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use Trazas;

....
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @INC, '.';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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.
losweberos
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2008-10-02 03:04 @169

Notapor losweberos » 2008-10-15 10:31 @479

Perdón, donde pongo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @INC, '.';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


quiero poner:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @INC, '/lib';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
losweberos
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2008-10-02 03:04 @169

Notapor losweberos » 2008-10-15 10:33 @481

Lo que pretendo decir es que no puedo retocar todos los scripts ya creados, disculpad por la cantidad de Post para algo tan sencillo...
losweberos
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2008-10-02 03:04 @169

Notapor explorer » 2008-10-15 10:41 @487

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.

...
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 losweberos » 2008-10-16 04:08 @214

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: Seleccionar todo
  %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: Seleccionar todo
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.
losweberos
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2008-10-02 03:04 @169

Notapor explorer » 2008-10-16 05:03 @252

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.
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 losweberos » 2008-10-16 09:43 @447

Gracias, lo solucioné así.
losweberos
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2008-10-02 03:04 @169


Volver a Avanzado

¿Quién está conectado?

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