如何让一个 perl 脚本调用另一个并获得 return 结果?

How can I have one perl script call another and get the return results?

如何让一个 perl 脚本调用另一个 perl 脚本并获得 return 结果?

我有 perl 脚本 B,它执行大量数据库工作,不打印任何内容,仅以 0 或 3 退出。

所以我希望 perl 脚本 A 调用脚本 B 并获得其结果。但是当我打电话时:

my $result = system("perl importOrig.pl filename=$filename");

my $result = system("/usr/bin/perl /var/www/cgi-bin/importOrig.pl filename=$filename");

我返回 -1,脚本 B 从未被调用。

我已经调试了脚本 B,手动调用时没有出现任何问题。

很明显我在上面的调用中出错了,我不确定是什么。

有很多事情要考虑。

Zeroth,这里有 perlipc 进程间通信的文档。错误变量 $! 中的值是多少?

首先,使用 $^X,这是您正在执行的 perl 的路径。由于子进程继承了您的环境,因此您希望使用相同的 perl,这样它就不会与 PERL5LIB 等混淆。

system("$^X /var/www/cgi-bin/importOrig.pl filename=$filename")

其次,CGI 程序往往期望设置特定的环境变量,例如 REQUEST_METHOD。将它们称为普通 command-line 程序通常会忽略这些内容。尝试从命令行 运行ning 程序,看看它是如何抱怨的。检查它是否获得了它想要的环境。您还可以检查程序的权限,看看您(或调用程序的任何用户 运行)是否被允许读取它(或其目录等)。你说没有故障,所以也许这不是你的特殊问题。但是,这两种环境是否以它们应有的所有方式匹配?

第三,考虑把第二个程序做成modulino。您可以 运行 它通常作为命令行脚本,但您也可以将它作为 Perl 库加载并直接使用它的功能。这避免了所有 IPC 的东西。您甚至可以 fork 以便同时 运行 s。