我继承了一些在Linux服务器上运行的Perl代码就好了。我正在使它在Windows XP,ActiveState Perl 5.16.2和BitNami WAMP堆栈上运行。 (注意:此设置已经在运行我的Perl .cgi程序,因此这是一个有效的设置。)
无论如何,“主要”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 strict
和use warnings
ETA:如果我复制stuff_1.cgi的内容并将其粘贴到main.cgi中(替换require
语句),代码就可以了。
我以前从未见过这样的事情;可能是什么原因?
答案 0 :(得分:1)
Why is the debugger not working [ActiveState or Strawberry Perl under Windows]?
最近发布的PathTools(Perl发行版的一部分,文件Cwd.pm)遗憾地包含了一个破坏EPIC调试器前端的错误。具体症状是错误消息“perl5db.pl没有返回真值”。 - 要查看此消息,您应在EPIC首选项中启用“调试器控制台”。此外,如果您遇到此问题,则调试根本不起作用。要修复它,您必须编辑Perl发行版的Cwd.pm并从一行中删除有问题的“eval”关键字,如此错误报告中所述。不要尝试通过将Perl的“lib”目录添加到项目的包含路径来修复它,因为这将导致忽略所有断点!
答案 1 :(得分:0)
我遇到的可能是ActiveState的Perl版本中存在缺陷。
无论如何 - 在花费太多时间之后 - 我能让它发挥作用的唯一方法就是替换
require 'extra\stuff_1.cgi';
与
eval { require 'extra\stuff_1.cgi' };
我不喜欢这样做,但现在是时候继续前进了!