我使用了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的
答案 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"';
但这太傻了。