Regex 如何从另一个perl脚本运行perl脚本(我无法修改)
我使用了Regex 如何从另一个perl脚本运行perl脚本(我无法修改),regex,perl,Regex,Perl,我使用了系统(“/usr/bin/perl abcd.pl”) 但它的中止声明是,无法在@INC中找到JSON.pm 请帮帮我 perl -v perl-v 这是为i386-freebsd-64int构建的perl版本5.8.8 (对于1个注册补丁,请参阅perl-V以了解更多详细信息) 版权所有1987-2006,拉里·沃尔 Perl只能在艺术许可证或 GNU通用公共许可证,可以在Perl5源代码工具包中找到 完整的Perl文档,包括常见问题列表,可以在 该系统使用“manperl”或“pe
系统(“/usr/bin/perl abcd.pl”)代码>
但它的中止声明是,无法在@INC中找到JSON.pm
请帮帮我
perl -v
perl-v
这是为i386-freebsd-64int构建的perl版本5.8.8
(对于1个注册补丁,请参阅perl-V以了解更多详细信息)
版权所有1987-2006,拉里·沃尔
Perl只能在艺术许可证或
GNU通用公共许可证,可以在Perl5源代码工具包中找到
完整的Perl文档,包括常见问题列表,可以在
该系统使用“manperl”或“perldocperl”。如果您有权访问
Internet,将浏览器指向Perl主页
grep '#!' abcl.pl
#!/volume/perl/bin/perl考虑使用do'abc.pl'代码>取而代之。这将在当前进程中执行另一个Perl脚本,而不是启动新的Perl脚本。它使用更少的开销,并且您将确保它使用的环境与您的脚本相同。这不是一个完全万无一失的建议,因为脚本可能会做一些干扰脚本的事情。但在我看来,如果它起作用,那就是一个更干净的解决方案
也就是说,问题可能是您调用的Perl版本与安装了JSON.pm的版本不同,正如Amon所建议的
不太可能的情况是,脚本本身正在使用@INC
(例如将其硬编码到特定目录)执行一些有趣的操作,从而使其无法工作。当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所指出的,您也可以选择不使用不同的进程执行脚本,并将系统
换成do
:
do "abcd.pl";
或者你可以同时做两件事:
system '/usr/bin/perl', '-e', 'do "abcd.pl"';
但是这太傻了。那么,系统上是否安装了JSON.pm?如果是,在哪里?什么是哪个perl
?如果它不同于/usr/bin/perl
:perl-E'say for@INC'
,/usr/bin/perl-E'say for@INC'
@amon,那么它就是/usr/bin/perl
@waldingknight-编辑您的问题并添加接下来3个命令的结果:perl-MJSON-E';'
和perl-V
和grep'#!'的结果pl
grep-En'^!|INC'abcd.pl
另一种变通方法对我很有效。我在目录中使用了/abc.pl-sr
,而不是perl abc.pl-sr
。它执行了脚本。谁能解释一下它是如何工作的。