如何从另一个perl脚本运行perl脚本(我无法修改)

时间:2014-03-28 12:11:59

标签: regex perl

我使用了system("/usr/bin/perl abcd.pl");

但是它的中止说法无法在@INC中找到JSON.pm

请在这里帮助我。

perl -v

perl -v

这是为i386-freebsd-64int构建的perl,v5.8.8 (有1个注册补丁,详见perl -V)

版权所有1987-2006,Larry Wall

Perl只能根据艺术许可或条款的条款进行复制 GNU通用公共许可证,可以在Perl 5源代码包中找到。

应该在上面找到Perl的完整文档,包括FAQ列表 这个系统使用" man perl"或" perldoc perl"。如果你有权访问 互联网,将您的浏览器指向http://www.perl.org/,即Perl主页。

grep '#!' abcl.pl

#!/体积/的Perl /斌/ perl的

2 个答案:

答案 0 :(得分:1)

请考虑使用do 'abc.pl';。这将执行当前进程中的其他Perl脚本,而不是启动新脚本。它使用较少的开销,并且您将确保它使用与脚本相同的环境。这不是一个完全万无一失的建议,因为脚本可能会做一些干扰您脚本的事情。但是,如果它有效,我认为它是一个更清洁的解决方案。

也就是说,问题可能是您调用的Perl版本与安装了JSON.pm的版本不同,正如Amon建议的那样。

不太可能的是,脚本本身正在使用@INC做一些有趣的事情(例如将其硬编码到特定目录),这会阻止它工作。

答案 1 :(得分:1)

当perl执行一个有shebang的脚本时,它会尝试额外帮助并调用shebang上指定的解释器。在这里,您希望使用/usr/bin/perl执行脚本,但它会看到/volume/perl/bin/perl并决定加载该脚本。

我不知道有什么方法可以覆盖这个“功能”。

/volume/perl/bin/perl安装JSON模块可能更简单:

$ /volume/perl/bin/perl -MCPAN -e 'CPAN::Shell->install("JSON")'

正如dan1111所述,您也可以选择不使用其他流程执行脚本,并将system换成do

do "abcd.pl";

或者你可以做到这两点:

system '/usr/bin/perl', '-e', 'do "abcd.pl"';

但这太傻了。