可以通过以下两种方式调用grep。我正确地错过了一条信息,以了解这种魔力。也许一个好的灵魂可以向我解释grep internal如何获得对该块的引用并进行处理,甚至更好的是我该如何编写一个使用bock表示法的子例程。

1)这是我认为的传统方式。
grep EXPR, list
示例:@foo = grep(!/^#/, @bar);2)这很不错,但对我来说却很神奇。
grep阻止列表
示例:@foo = grep {!/^#/} @bar;
提前谢谢了。

BR/赫尔曼

最佳答案

检查prototypes

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

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

print join "\n", mygrep { $_%2 } 1..10;

与上述相同,但没有原型(prototype),
sub mygrep {
  my $f = shift;

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

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

10-04 19:06