【问题标题】:Is this a bug of require of Perl 5.8.8?这是 Perl 5.8.8 要求的错误吗?
【发布时间】:2011-10-17 11:49:03
【问题描述】:

代码如下:

#!/usr/bin/perl

print 1;
{
require shift;                                                                        
}

事实证明,当我运行./script script 时,会打印两个1s。

所以我的脚本文件实际上被加载了两次?这是不是bug??

根据文档:

"require" 要求包含一个库文件,如果它还没有 被收录了。

【问题讨论】:

    标签: perl require


    【解决方案1】:

    require 仅在文件之前加载了 requireusedo 时才跳过加载文件,而不是作为主脚本加载的文件。

    见:%INC

    【讨论】:

      【解决方案2】:

      不,这不是错误。您的脚本打印 1,然后需要第一个参数的名称,在这种情况下,您提供了名称“脚本”,它再次运行您的脚本并打印第二个 1。

      Require

      The file must return true as the last statement to indicate successful execution of any initialization code, so it's customary to end such a file with 1; unless you're sure it'll return true otherwise. But it's better just to put the 1; , in case you add more statements.

      您还应该看到一些错误,例如Null filename used at script line 5

      【讨论】:

      • 如果文件已经包含,require 不应该什么都不做吗? "require" demands that a library file be included if it hasn’t already been included.
      • 模块最后返回 1 ,这样 require 就可以按您的意愿工作。如果您阅读我链接到的 Require 文档:The file must return true as the last statement to indicate successful execution of any initialization code, so it's customary to end such a file with 1; unless you're sure it'll return true otherwise. But it's better just to put the 1; , in case you add more statements.
      • 我尝试在末尾添加1,还是一样,比如说,得到了两个1s。
      • 请实际阅读我链接到的所有 Require 文档。您需要 perl 脚本而不是模块/库。 Perls Require 不像 #include 对于 C 那样工作(内联)。你还没有说明你在这里实际尝试做什么?
      • 你的意思是require 只检查require bare_word,而不检查require "bare_word"??我试图理解为什么require 包含我的script 两次,这与它的文档不同..
      【解决方案3】:

      当我运行你的代码时,我得到:

      $ ./script script
      Null filename used at script line 5.
      Compilation failed in require at ./script line 5.
      11$
      

      所以我无法重现您的结果... ;)

      您做出了错误的假设:您的脚本被称为“脚本”这一事实与 used、required 上的 done 无关...require 声明是第一次需要某些东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-12
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-04
        • 1970-01-01
        相关资源
        最近更新 更多