Perl如何在我的子例程中利用块参数(比如grep一样)

use*_*516 8 perl function block argument-passing

可以通过以下两种方式调用grep.我正好错过了一条信息来理解这块魔法.也许一个好的灵魂可以向我解释grep internal如何获取对块的引用并处理它甚至更好我如何编写使用bock表示法的子例程.

1)这是我认为的传统方式.grep EXPR,列表示例:@foo = grep(!/^#/, @bar); 2)这对我很好,但很神奇但很神奇.grep BLOCK LIST示例:@foo = grep {!/^#/} @bar;

提前谢谢了.

BR /赫尔曼

Сух*_*й27 5

检查原型

sub mygrep (&@) {
  my $f = shift;

  return map { $f->() ? $_ : () } @_;
}

print join "\n", mygrep { $_%2 } 1..10;
Run Code Online (Sandbox Code Playgroud)

与上面相同,但没有原型,

sub mygrep {
  my $f = shift;

  return map { $f->() ? $_ : () } @_;
}

print join "\n", mygrep( sub{ $_%2 }, 1..10 );
Run Code Online (Sandbox Code Playgroud)