使用qw(:const)和use语句

Jag*_*ata 6 perl

很抱歉有一个非常基本的问题,但我是Perl的初级水平,无法在SO(或其他任何地方!)找到适合此问题的解释.我知道我可以写一些例子并试图解读这个但我真的可以使用专家的一些知识.

我正在浏览一些代码,开发人员使用以下代码来源:

use libExample qw(:const)
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这意味着从libExample中获取常量,但我们真的想知道它是如何工作的.

  1. 为什么我不能简单地说:( use libExample qw(const) 试图理解相关性:)

  2. 是否有我们可以/应该写的东西,libExample.pm以使其他开发人员利用这个库来代替const来提及这些选项.

谢谢!

sim*_*que 8

语法use Foo qw(:const)使用Exporter中的EXPORT_TAGS功能.

设置库模块时,通常会有一堆函数或类变量.然后通过告诉它默认导出什么来配置导出器

package Foo;
use Exporter;

our @EXPORT = qw( frobnicate );

sub frobnicate { ... }
Run Code Online (Sandbox Code Playgroud)

或当他们被要求时.

OUR @EXPORT_OK = qw( frobnicate barnicate );

sub barnicate { ... }
Run Code Online (Sandbox Code Playgroud)

但您也可以告诉它将事物组合在一起,因此库的用户不需要列出所有方法.考虑这个例子.

package Foo;
use Exporter;

our @EXPORT_OK qw(monday tuesday wednesday thursday friday saturday sunday);

sub monday { ... }
sub tuesday { ... }
sub wednesday { ... }
sub thursday { ... }
sub friday { ... }
sub saturday { ... }
sub sunday { ... }
Run Code Online (Sandbox Code Playgroud)

现在,如果我想要所有的工作日,我必须这样做:

use Foo qw(monday tuesday wednesday thursday friday);
Run Code Online (Sandbox Code Playgroud)

这是一条长线.相反,如果可以对这些进行分组,那将非常有用.好吧,他们可以.如果您在库中执行此操作:

package Foo;
use Exporter;

our %EXPORT_TAGS = ( 
    working_days => [ 
      qw(monday tuesday wednesday thursday friday)
    ],
    weekend_days => [
      qw(saturday sunday)
    ]
);

# ...
Run Code Online (Sandbox Code Playgroud)

然后我们可以使用一个标签而不是五个函数名称:

use Foo qw(:working_days);
Run Code Online (Sandbox Code Playgroud)

请注意,这是等效的:

use Foo ':working_days';
Run Code Online (Sandbox Code Playgroud)


Cha*_*hak 6

use libExample qw(:const)
Run Code Online (Sandbox Code Playgroud)

将选择$EXPORT_TAGS{const}匿名数组中的所有名称,并将它们导入当前名称空间.

use libExample qw(const)
Run Code Online (Sandbox Code Playgroud)

将选择const并将其导入当前命名空间.

还有其他变种:

[!]name         This name only
[!]:DEFAULT     All names in @EXPORT
[!]:tag         All names in $EXPORT_TAGS{tag} anonymous array
[!]/pattern/    All names in @EXPORT and @EXPORT_OK which match
Run Code Online (Sandbox Code Playgroud)

有关该主题的更多详细信息,请查看Exporter文档.