2014-12-03 43 views
1

在Perl有可能隱含變量隱式傳遞給一些內置函數,就像這樣:的Perl:隱變量傳遞給自定義子

$_ = 'foo'; 
print; # prints foo 

是否可以定義爲我的子這樣的行爲?像這樣:

sub bar { 
    print $_[0]; 
} 

$_ = 'foo'; 
&bar; # does not work 

在此先感謝。

+3

一般來說,做這樣的事情並不是好的做法。最好只輸入多餘的兩個字符:'bar($ _)'。哦,還有,你應該使用'bar()'語法。其他用法'&bar','&bar()'具有額外的隱藏功能。 – TLP 2014-12-03 13:48:47

回答

2

$_[0]@_數組的第一個元素,用於將值傳遞給子例程。 $_用作全局變量隱含,

sub bar { 
    my ($arg) = (@_, $_); 
    print $arg; 
} 

local $_ = 'foo'; 
bar(); 
bar("explicit foo"); 
+0

好吧,但是當我傳遞另一個參數,比如bar('not-a-foo'),這不會像print sub那樣工作;有沒有直接的方法來做到這一點,或者我必須手動實現它(標量@_ == 0?$ _:$ _ [0])? – amik 2014-12-03 12:59:21

+0

@amik檢查更新。這當然只有當函數只需要一個參數時。 – 2014-12-03 13:20:23

0

一個參數:

sub bar { 
    my $arg = @_ ? shift : $_; 
    ... 
} 

單參數(5.10+):

sub bar(_) { 
    my $arg = shift; 
    ... 
} 

多個參數:

sub bar { 
    my @args = @_ ? @_ : $_; 
    ... 
} 

多參數( 5.10+):

sub bar([email protected]) { 
    my @args = @_; 
    ... 
} 
相關問題