为什么不需要(“文件名”)工作?

时间:2013-03-21 07:34:50

标签: perl require

我继承了一些在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 strictuse warnings

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

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

2 个答案:

答案 0 :(得分:1)

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

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' };

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

相关问题