0

我继承了一些在 Linux 服务器上运行良好的 Perl 代码。我正在让它在 Windows XP、ActiveState Perl 5.16.2 和 BitNami WAMP 堆栈上运行。(注意:这个设置已经在运行我的 Perl .cgi 程序,所以这是一个工作设置。)

无论如何,“main” Perl 程序——我们称之为 main.cgi——有这样的声明:

require("extra/stuff_1.cgi");

main.cgi 运行时出现错误:

C:/BitNami/apache2/cgi-bin/extra/stuff_1.cgi did not return a true value at C:/BitNami/apache2/cgi-bin/main.cgi line XX.

现在奇怪的是: stuff_1.cgi 以 1 结尾;(即,它是文件中的最后一行)!

我什至注释掉了 stuff_1.cgi 中函数中的代码——这些函数主要是 Here Documents 的函数,例如

sub func {

return <<EOF;
...
EOF
}

让它只包含

sub func {
#
#return <<EOF;
#...
#EOF
}

等等

然而“没有返回真实值”仍然发生!

但是,如果我删除所有代码,那么 stuff_1.cgi 包含

1; 

错误消失了(应该如此)。

stuff_1.cgi 通过perl -c,即使使用use strictanduse warnings

ETA:如果我复制 stuff_1.cgi 的内容并将其粘贴到 main.cgi 中(替换require语句),代码就可以正常工作。

我以前从未见过这样的事情;可能是什么原因?

4

2 回答 2

1

为什么调试器不工作(Windows 下的 ActiveState 或 Strawberry Perl)?

为什么调试器不工作 [Windows 下的 ActiveState 或 Strawberry Perl]?

不幸的是,最近发布的 PathTools(Perl 发行版的一部分,文件 Cwd.pm)包含一个破坏 EPIC 调试器前端的错误。具体症状是错误信息“perl5db.pl 没有返回真值”。- 要查看此消息,您应该在 EPIC 首选项中启用“调试器控制台”。此外,如果你有这个问题,调试根本不起作用。要修复它,您必须编辑 Perl 发行版的 Cwd.pm 并从一行中删除有问题的“eval”关键字,如本错误报告中所述。不要试图通过将 Perl 的“lib”目录添加到项目的包含路径来修复它,因为这将导致所有断点被忽略!

于 2013-03-21T07:54:36.243 回答
0

也许我遇到的是 ActiveState 的 Perl 版本中的一个缺陷。

无论如何——在这上面花了太多时间之后——我能让它工作的唯一方法就是更换

require 'extra\stuff_1.cgi';

eval { require 'extra\stuff_1.cgi' };

我不喜欢这样做,但现在是时候继续前进了!

于 2013-03-21T08:43:10.437 回答