0

我有一个普通的 perl 脚本,可以通过perl -w test.pl. 然后我有一个可以从网络浏览器访问的 mod_perl2 脚本。我想让后者调用前者并将输出发送到浏览器,同时刷新。

mp2 脚本没有shebang 行,因为它是mod_perl,所以它不知道在哪里perl。此外,调用system('perl -w c:\\path\\to\\test.pl')会导致错误:

    'perl' 未被识别为内部或外部命令,
    可运行的程序或批处理文件。

由于某种原因我无法弄清楚,因为它在我的路径变量中。也许不是因为 Apache 正在运行的帐户。

是否有某种方法可以运行脚本并捕获其输出,而无需通过调用 perl 可执行文件system()?即,使用已经加载的解释器的东西?

4

5 回答 5

1

除了 mod_perl 问题,当前 perl 解释器的位置在$^X. 如果你不是在 mod_perl 下运行,那么你应该找到 perl。当然,在 mod_perl 中,您可能不想要那个,因为它已经融入 apache。

有些人提到了%PATH%,但我不建议这样做。只需找出 Perl 的完整路径并明确使用它,而不依赖于 %PATH%。无论您是硬编码还是在配置中设置它都取决于您。

于 2009-10-08T23:36:11.950 回答
0
do "/path/to/test.pl";

或者

require "/path/to/test.pl";

将加载和评估文件的内容。

需要注意的一个问题require是评估文件必须返回“true”。执行此操作的常用方法是将 a"1;"放在脚本的末尾。

于 2009-10-07T20:40:19.430 回答
0

您需要找到 Perl 二进制文件所在的位置(在 Unix 上,do which perl,在 Windows 上,找到 Perl 图标并找到命令行路径或找到perl安装的目录 - 例如,“c:\program files\myPerlDistro\bin\perl.exe "

然后,您需要将该完整路径显式添加到您的qx//(不要使用系统,因为它会丢失输出)调用,或者将该路径添加到 Apache 的 PATH 变量中。

第二种选择是使用 EmbPerl - 它具有 Execute 指令,可以就地执行其他脚本并包含它们的输出 - 在同一个解释器中。它在 mod_perl 下运行。

于 2009-10-07T20:52:24.540 回答
0

显然,问题在于正在运行%PATH%的帐户的httpd不包含perl. 您可以httpd.conf使用PerlSetEnv进行设置。

于 2009-10-07T21:18:04.133 回答
-1

如果这是 Win32(如您的标签所示),您.pl不能通过标准的 Windows 东西将扩展名与 Perl 关联(例如破解注册表或在资源管理器窗口中的工具 > 文件夹选项 > 文件类型下)?

于 2009-10-08T12:46:37.990 回答