Yo haría lo siguiente: averiguar la ruta
absoluta dónde quedan instalados los módulos que instalo yo, y luego, en el programa, poner el 'use lib' con esa ruta 'absoluta'.
En el caso que tuve con un alojamiento así, desde el panel de control podías mandar instalar distribuciones Perl, de la lista que te ofrecía, o la URL que podías indicar. En la página de instrucciones te daban indicaciones de que pusieras el bloque BEGIN{} como el que has mostrado, y de esa manera los programas y cgi tenían acceso a los módulos instalados.
Yo, lo primero que hice fue un pequeñísimo cgi cuya única misión era un File::Find sobre @INC, por lo que devolvía toda la lista completa de todos los archivos que podían accederse con @INC. Allí supe qué módulos estaban instalados de base y dónde se instalaban los nuevos módulos. Todas eran rutas de la forma /home/<usuario>/perl/, pero eso depende de cada sistema.
Luego, arreglé un poco el código BEGIN, para que no saturara de rutas inútiles @INC (cuanta más rutas, más lento el programa):
Using perl Syntax Highlighting
my $homedir = (getpwuid($>))[7]; # directorio raíz del usuario (nosotros)
my $n_inc = scalar @INC; # cuántas rutas hay por defecto
for (my $i = 0; $i < $n_inc; $i++ ) { # para todas ellas...
if (-d $homedir . '/perl' . $INC[$i]) { # si existe la misma ruta, pero dentro del dir. de usuario
unshift(@INC,$homedir . '/perl' . $INC[$i]); # lo agregamos al principio de @INC
$n_inc++; # actualizamos número de rutas
$i++; # saltamos al siguiente (recordar que hemos metido una por delante)
}
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
(naturalmente, la parte de '/perl' hay que personalizarla según cada proveedor de alojamiento)
Y ya está: una vez que hemos actualizado @INC, ya no hace falta poner 'use lib' en ningún sitio.
Es más, si tienes un conocimiento exacto de todas las rutas extra que necesitas en tus programas, puedes quitar toda la parte BEGIN{} y usar un único 'use lib' con esas rutas. Pero
siempre (para evitar problemas), escritas de forma absoluta. Sería algo así (no sería necesaria la parte BEGIN{}):
Using perl Syntax Highlighting
use lib qw(
/home/acertp3d/perl5/lib/perl5/i686-linux
/home/acertp3d/perl5/lib/perl5
/home/acertp3d/perl5/usr/local/lib/perl5/5.8.8/i686-linux
/home/acertp3d/perl5/usr/local/lib/perl5/5.8.8
/home/acertp3d/perl5/usr/local/lib/perl5/site_perl/5.8.8/i686-linux
/home/acertp3d/perl5/usr/local/lib/perl5/site_perl/5.8.8
);
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
(Naturalmente, estas rutas dependen de cada sistema. Solo hay que indicar las rutas extra a las que @INC ya trae por defecto).
Si tienes módulos instalados en 'libs/', entonces debes ponerlo de forma absoluta, para que quede clara dónde quieres buscar, y no en cualquier otro 'libs/' que @INC encuentre.
use lib '/home/acertp3d/libs';