Probablemente el orden de ejecución no sea el motivo por el que no funcionó.
use
es una directiva de tiempo de compilación. Usted push
se realiza en tiempo de ejecución:
push (@INC,"directory_path/more_path");
use Foo.pm; # In directory path/more_path
se puede utilizar un bloque de comenzar a solucionar este problema:
BEGIN {
push (@INC,"directory_path/more_path");
}
use Foo.pm; # In directory path/more_path
OMI, es más claro, y por lo tanto la mejor manera de use lib
:
use lib "directory_path/more_path";
use Foo.pm; # In directory path/more_path
Consulte perlmod para obtener información sobre BEGIN y otros bloques especiales y cuándo se ejecutan.
Editar
Para el código de carga con respecto a la secuencia de comandos/biblioteca, apoyo firmemente File::FindLib
Se puede decir use File::FindLib 'my/test/libs';
para buscar un directorio de la biblioteca en cualquier lugar por encima de la secuencia de comandos en el camino.
Digamos que su trabajo se estructura como esta:
/home/me/projects/
|- shared/
| |- bin/
| `- lib/
`- ossum-thing/
`- scripts
|- bin/
`- lib/
dentro de un script en ossum-thing/scripts/bin
:
use File::FindLib 'lib/';
use File::FindLib 'shared/lib/';
encontrará los directorios de biblioteca y añadirlos a su @INC
.
También es útil crear un módulo que contenga toda la configuración de entorno necesaria para ejecutar su conjunto de herramientas y simplemente cargarlo en todos los ejecutables de su proyecto.
use File::FindLib 'lib/MyEnvironment.pm'
Después de muchos intentos, el código que finalmente funcionó fue la pregunta a la que Andomar se vinculó: use FindBin; # ubicar este scriptuse lib "$ FindBin :: Bin/.."; # use el directorio principal use EPMS; ¡Gracias por toda su ayuda a todos! –
Saludos, parece que todos leen "directorio actual" donde escribió "directorio del módulo". – Andomar
Se encontró con esto después de leer http://stackoverflow.com/a/90721/2668831, que afirma que el método FindBin no es sólido para algunas formas de organización modular de Perl (alguien más puede ser capaz de aclarar) –