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条评论
登录后参与评论

相关文章

来自分类Dev

Perl子例程中的本地$ _

来自分类Dev

PERL中的子例程原型

来自分类Dev

检查Perl中是否存在子例程

来自分类Dev

perl中的子例程以执行#ARGV条目

来自分类Dev

锁定Perl子例程

来自分类Dev

Perl子例程中的变量不会释放内存

来自分类Dev

如何在Perl中创建动态子例程名称

来自分类Dev

Perl脚本中的奇数子例程编译错误

来自分类Dev

Perl中未定义的子例程和主要错误

来自分类Dev

Perl子例程从哪里获取实际参数中缺少的值?

来自分类Dev

在Perl中以下划线开头的子例程名称

来自分类Dev

在Perl子例程中返回文件句柄

来自分类Dev

检测如何在Perl中调用子例程

来自分类Dev

Perl脚本中的奇数子例程编译错误

来自分类Dev

Perl中未定义的子例程和主要错误

来自分类Dev

子例程中的Perl特殊变量“ @_”不起作用

来自分类Dev

Perl作用域-访问子例程中的变量

来自分类Dev

仅在子例程中需要时才使用 Perl 模块

来自分类Dev

Perl函数和子例程

来自分类Dev

Perl继承-子例程覆盖

来自分类Dev

Perl +递归子例程+在子例程外部定义的访问变量

来自分类Dev

将子例程传递给Perl子例程

来自分类Dev

如何获取Perl子例程的参数内容

来自分类Dev

Perl-转换变量的子例程

来自分类Dev

Perl子例程返回意外值

来自分类Dev

与Coro并行运行perl子例程

来自分类Dev

Perl子例程未返回任何值

来自分类Dev

Perl线程-从模块(pm)调用子例程

来自分类Dev

在Perl中将子例程写入日志文件