7

做什么

use Cwd qw(); 

在perl中是什么意思?

我知道 qw 给 () 中的每个元素加上引号但是这种情况呢?

4

3 回答 3

18

qw()是编写空列表的一种奇特方式。这样做()会缩短两个字符。

传递一个空列表对于避免导入use很重要。从文档中:use

如果您不想调用包的导入方法(例如,阻止您的命名空间被更改),请显式提供空列表

例如,默认情况下,Cwd模块导出getcwd. 如果我们给它一个空列表,这不会发生:

use strict;
use Cwd;
print "I am here: ", getcwd, "\n";

有效,但是

use strict;
use Cwd ();
print "I am here: ", getcwd, "\n";

用 中止编译Bareword "getcwd" not allowed while "strict subs" in use

于 2013-09-26T23:08:45.223 回答
4

我相信,因为qw()afteruse Module用于导入子例程,所以当它留空时,它只会加载模块,但不会将任何子例程导入命名空间。

例如,由于未导入 getcwd,因此会引发错误:

#!/usr/bin/perl
use warnings;
use strict;
use Cwd qw();
my $dir=getcwd;

但我不确定这是否是您正在寻找的答案..!

于 2013-09-26T23:05:49.200 回答
-2

通常它“导入”命令,因此您不必创建对象并在它们上调用函数。

示例(来自 perlmonks):

 #without qw
 use CGI;
 my $q = CGI->new();
 my $x = $q->param('x');

 #with qw
 use CGI qw/:standard/;
 my $x = param("x")

资料来源:http ://www.perlmonks.org/?node_id=1701

大多数模块也有像 :all 或 :standard 这样的导入组。

于 2013-09-26T23:01:25.823 回答