Perl 为什么不是';是否不需要(“文件名”)工作?
我继承了一些在Linux服务器上运行的Perl代码。我正在让它在Windows XP、ActiveState Perl 5.16.2和BitNami WAMP堆栈上运行。(注意:此设置已在运行我的Perl.cgi程序,因此这是一个工作设置。) 无论如何,“main”Perl程序——我们称之为main.cgi——有以下语句:Perl 为什么不是';是否不需要(“文件名”)工作?,perl,require,Perl,Require,我继承了一些在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/stuf
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文档的函数,例如
sub func {
return <<EOF;
...
EOF
}
错误消失了(正如它应该消失的那样)
stuff_1.cgi通过perl-c
,即使是使用严格的和使用警告
ETA:如果我复制stuff_1.cgi的内容并将其粘贴到main.cgi中(替换require
语句),代码工作正常
我以前从未见过这样的事情;原因可能是什么?为什么调试器不工作(Windows下的ActiveState或草莓Perl)?
不幸的是,PathTools的最新版本(Perl发行版的一部分,文件Cwd.pm)包含一个破坏EPIC调试器前端的bug。具体症状是错误消息“perl5db.pl未返回真值。”-要查看此消息,应在EPIC首选项中启用“调试器控制台”。此外,如果您有这个问题,调试根本不起作用。要修复它,必须编辑Perl发行版的Cwd.pm,并从一行中删除有问题的“eval”关键字,如本错误报告中所述。不要试图通过将Perl的“lib”目录添加到项目的include路径来修复它,因为这将导致忽略所有断点
也许我遇到的是ActiveState版本的Perl中的一个缺陷
不管怎么说,在花了太多时间之后,我唯一能让它工作的方法就是更换它
require 'extra\stuff_1.cgi';
与
我不喜欢这样做,但该是继续前进的时候了 有趣。但是,我的Cwd.pm没有此问题。此问题似乎是由BitNami WAMP堆栈引起的。有时有效,有时无效。
1;
require 'extra\stuff_1.cgi';
eval { require 'extra\stuff_1.cgi' };