在Perl有可能隱含變量隱式傳遞給一些內置函數,就像這樣:的Perl:隱變量傳遞給自定義子
$_ = 'foo';
print; # prints foo
是否可以定義爲我的子這樣的行爲?像這樣:
sub bar {
print $_[0];
}
$_ = 'foo';
&bar; # does not work
在此先感謝。
在Perl有可能隱含變量隱式傳遞給一些內置函數,就像這樣:的Perl:隱變量傳遞給自定義子
$_ = 'foo';
print; # prints foo
是否可以定義爲我的子這樣的行爲?像這樣:
sub bar {
print $_[0];
}
$_ = 'foo';
&bar; # does not work
在此先感謝。
$_[0]
是@_
數組的第一個元素,用於將值傳遞給子例程。 $_
用作全局變量隱含,
sub bar {
my ($arg) = (@_, $_);
print $arg;
}
local $_ = 'foo';
bar();
bar("explicit foo");
好吧,但是當我傳遞另一個參數,比如bar('not-a-foo'),這不會像print sub那樣工作;有沒有直接的方法來做到這一點,或者我必須手動實現它(標量@_ == 0?$ _:$ _ [0])? – amik 2014-12-03 12:59:21
@amik檢查更新。這當然只有當函數只需要一個參數時。 – 2014-12-03 13:20:23
一個參數:
sub bar {
my $arg = @_ ? shift : $_;
...
}
單參數(5.10+):
sub bar(_) {
my $arg = shift;
...
}
多個參數:
sub bar {
my @args = @_ ? @_ : $_;
...
}
多參數( 5.10+):
sub bar([email protected]) {
my @args = @_;
...
}
一般來說,做這樣的事情並不是好的做法。最好只輸入多餘的兩個字符:'bar($ _)'。哦,還有,你應該使用'bar()'語法。其他用法'&bar','&bar()'具有額外的隱藏功能。 – TLP 2014-12-03 13:48:47