写这是正确的吗?
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] 删除。
我来说两句