在Perl中,qw(:ALL)的用途是什么?

6

我知道qw()函数,但是我在很多地方看到了qw(:ALL)的使用。

使用这个有什么优点?哪里可以找到qw(:ALL)的使用示例呢?

2个回答

19

qw(:ALL) 的意思与 (":ALL") 完全相同。它只是一个包含单个四个字符字符串的简单列表——冒号、大写字母A、大写字母L和大写字母L。没什么特别的。

许多 Perl 模块提供可以导入到您命名空间中的函数。例如,Carp 模块提供了像 croakconfess 这样的函数。许多这样的模块允许您指定要导入的函数列表:

use Carp "confess", "croak", "cluck";
use Carp qw( confess croak cluck );      # this means the same, but looks cleaner

有些模块允许您在列表中指定诸如":ALL"":all""-all"之类的内容,以指示您希望导入它们所有提供的函数。 File::Spec::Functions是一个实现了这一功能的模块示例:

use File::Spec::Functions ":ALL";
use File::Spec::Functions qw( :ALL );    # means the same again

冒号的原因是为了更清楚地表明您不是要求导入一个名为ALL的函数(这样的函数可能存在 - 确实,List::MoreUtils提供了一个名为all的函数)。这没有技术上的原因,只是惯例。完全可以编写一个模块,使得:

use Foo::Bar "ALL";

... 导入了来自Foo::Bar的所有函数。但人们不这样做是因为传统。


1
具体来说,冒号是常用的“Exporter”模块的约定,用于导出与标签相关联的名称列表。 - mob

2

有些模块在其import方法中使用:ALL作为参数来导出所有可能的函数。请参见File::Spec::Functions作为示例。

use File::Spec::Functions qw(:ALL);
print tmpdir();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接