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