【问题标题】:Why isn't require("filename") working?为什么 require("filename") 不起作用?
【发布时间】:2013-03-10 15:01:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: perl require


    【解决方案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”目录添加到项目的包含路径来修复它,因为这将导致所有断点被忽略!

    【讨论】:

    • 有趣。但是我的 Cwd.pm 没有这个问题。
    • 此问题似乎是由 BitNami WAMP 堆栈引起的。有时有效,有时无效。
    【解决方案2】:

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

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

    require 'extra\stuff_1.cgi';
    

    与

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

    我不喜欢这样做,但该继续前进了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 2016-09-25
      • 1970-01-01
      • 2011-05-09
      • 2010-09-13
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      相关资源
      最近更新 更多