"perl使用Cwd qw();的含义是什么?"

7

请问:

use Cwd qw(); 

在 perl 中 mean 是什么意思?

我知道 qw 会给 () 内的每个元素添加引号,但是这种情况怎么处理呢?


1
在编写程序时,明确列出导入模块是个好主意。这样,很容易找到子程序被定义的位置。在这种情况下,这个人更进一步地使用了函数的完整名称(例如 Cwd::abs_path)而不是根本不导入它。 - ikegami
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";

使用"strict subs"时,编译将因为Bareword "getcwd" not allowed而中止。


4

我相信由于在use Module之后qw()用于导入子例程,当它为空时,它只是加载了模块,而没有将任何子例程导入命名空间。

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

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

但我不确定这是否是你要寻找的答案..!

-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这样的导入组。


问题是:为什么要明确地导入空? - reinierpost
强制对象在单个实例上使用,可能吗? - Zach Leighton
问题的答案由amon给出。 - reinierpost

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