prototype &
run {
my $block = shift;
is(process($block->foo), $block->bar, $block->name);
};
って引数に関数渡せる。
これは perldoc perlsub の Prototypes の項目に載ってる
An "&" requires an anonymous subroutine, which, if passed as the first argument, does not require the "sub" keyword or a subsequent comma.
プロトタイプで & を第一引数に指定した場合その無名関数には sub つけなくても良い。
これは割と使えそうだ。
たとえば、STDERRとかになんか出力しちゃううざいモジュールを使ってtestを書いているときに
sub execute(&) {
my ($out, $err);
tie_output( *STDOUT, $out );
tie_output( *STDERR, $err );
my $res = shift->();
untie *STDOUT;
untie *STDERR;
$res;
}
とか作っとくと
my $res = execute { $suck_module_output_stderr->method };
とかでSTDERRだすことなくそのモジュールのテストかける。いいのー。
grep とかな実装しかあんまりみないから新鮮に見えるのかな。