Perl:将隐式变量传递给自定义子

时间:2014-12-03 12:42:22

标签: perl

在Perl中,可以隐式地将隐式变量传递给一些内置函数,如:

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

是否可以为我的sub定义此类行为?像这样:

sub bar {
    print $_[0];
}

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

$_[0]@_数组的第一个元素,用于获取传递给子例程的值。 $_用作全局隐式变量

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

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

答案 1 :(得分:0)

单一论点:

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

单个参数(5.10 +):

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

多个参数:

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

多个参数(5.10 +):

sub bar(_@) {
   my @args = @_;
   ...
}