为什么h2xs生成带有冒号的模块名称?

时间:2018-07-18 14:14:30

标签: perl

我运行h2xs来启动一个新的Perl模块。它创建主模块和Makefile.PL,包名称以双冒号结尾。例如,在My / Module.pm中:

package My::Module::

以及在Makefile.PL中:

WriteMakefile(
    NAME   => 'My::Module::',
    ...
);

因此,小脚本

perl -Ipath/to/my/module -MMy::Module -e 'print $My::Module::VERSION, "\n"'

不打印任何内容。

当我将包名称更改为“ My :: Module”(不带冒号)时,该脚本将打印版本号。

为什么默认情况下h2xs会在主程序包名称后附加'::'?我在文档中找不到任何内容。

Perl 5.18.2

1 个答案:

答案 0 :(得分:0)

我的建议:尾随双冒号表示我们正在处理程序包名称。

来自perlmonks 的示例:

use 5.010;

{
   package Foo;
   sub new { bless [] }
   sub Bar { 'Quux' }
}
{
   package Foo::Bar;
   sub new { bless [] }
}
{
   package Quux;
   sub new { bless [] }
}

my $object1 = Foo::Bar::->new;
say ref $object1;   # says "Foo::Bar"

my $object2 = Foo::Bar->new;
say ref $object2;   # says "Quux"