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 /赫尔曼
检查原型
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)