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
。它执行了脚本。谁能解释一下它是如何工作的。