在子目录中执行Perl程序?

时间:2012-11-29 23:48:06

标签: perl bash

这是我的项目:

assembler/
    asm.pl               # Main entry point
    instructions.pm
    support.pm
build.sh

---- assembler/asm.pl ----
...
use instructions;
...

---- assembler/instructions.pm ----
...
use support;
...

我希望build.sh包含如下行:

perl assembler/asm.pl $1

asm.pl尝试使用相关模块时,它无法找到它们。这条线有效,但感觉肮脏和可耻:

cd assembler; perl asm.pl ../$1; cd ..

执行asm.pl的正确方法是什么?我希望直接从任何其他任意位置执行位于文件系统任何位置的程序,例如

$ cd /some/dumb/path
$ /path/to/the/project/build.sh /another/goofy/path.asm

1 个答案:

答案 0 :(得分:4)

我认为问题在于perl正试图找到相对于你正在执行的路径的库。这就是为什么先运行cd修复它。你的另一个选择是告诉perl它可能找到文件的位置。您可以使用PERL5LIB环境变量或-I开关来执行此操作。这应该这样做:

perl -I./assmbler/ assembler/asm.pl $1