2011-09-20 104 views
7
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有什麼區別?

Perl中的BAREWORD*BAREWORD有什麼區別?

回答

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使用該字符串作爲呼叫者的封裝的水珠的名稱,所以上面的功能上等同到

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

開放,關閉等情況也是如此嗎? –

+1

@new_perl,由於特殊的解析規則,'open'和'close'使參數被解釋爲一個glob(直接),而不是被用來獲取一個glob的字符串。這就是爲什麼'open(FOO,...)'在'use strict;'和'open3(FOO,...)下工作的原因。 – ikegami

+0

但'open(* FOO)'也是有效的,對吧? –

相關問題