Perl子例程中的本地$ _

Nowox

写这是正确的吗?

sub foobar {
   local $_ = $_[0] if @_;
   s/foo/bar/;
   $_;
}

这样做的想法是,$_如果没有给出任何参数,则采取相同的chomp做法。然后我可以写

foobar($_);

或者

&foobar;
池上

local $_ = ... if @_;$_当sub接收到参数时才会本地化,这意味着它不会保护调用方的$_是sub不会接收到参数,那不是您想要的。

最小的修复是

sub sfoobar {
   local $_ = @_ ? shift : $_;
   s/foo/bar/;
   return $_;
}

但是您此时最好也使用命名变量。

sub sfoobar {
   my $s = @_ ? shift : $_;
   $s =~ s/foo/bar/;
   return $s;
}

5.10+引入了_原型。

sub sfoobar(_) {
   my ($s) = @_;
   $s =~ s/foo/bar/;
   return $s;
}

推出了5.14+ s///r

sub sfoobar(_) {
   return $_[0] =~ s/foo/bar/r;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章