Perl中的BAREWORD和* BAREWORD有什么区别?

时间:2011-09-20 05:34:27

标签: perl

my $childpid = open3(HIS_IN, HIS_OUT, HIS_ERR, $cmd, @args);

my $childpid = open3(*HIS_IN, *HIS_OUT, *HIS_ERR, $cmd, @args);

以上似乎都适用于我的应用程序。

Perl中BAREWORD*BAREWORD之间有什么区别?

1 个答案:

答案 0 :(得分:8)

裸字的含义各不相同。大多数情况下,裸字是函数调用。

sub foo { say "Hello"; }
foo;

有时,它是一个字符串文字。

$x{foo}    # $x{"foo"}

在其他情况下,它会产生一个typeglob。

print STDOUT "foo";   # print { *STDOUT } "foo";

在这种情况下,

open3(HIS_IN, HIS_OUT, HIS_ERR, ...)

相当于

open3("HIS_IN", "HIS_OUT", "HIS_ERR", ...)

但是open3使用该字符串作为调用者包中glob的名称,因此上面的功能等同于

open3(*HIS_IN, *IS_OUT, *HIS_ERR, ...)