Mooseメソッドにブロックを渡すことは何とか可能ですか? 標準の Perl では、このようなプロトタイプで関数を定義できます。
sub fn (&) {
my $code =\&{shift @_};
$code->();
}
sub
次に、明示的な参照なしで関数にブロックを渡しfn { say "Hi there, world" }
ます。
これは、サブルーチンが最初のパラメーターである場合にのみ可能であると思います。これは常に$self
Mooseメソッドを使用するため、そこでは可能ではないようで、もう少し明示的な方法で行う必要があります:
sub wrapper {
my ($self, $code) = @_;
$code->()
}
Wrapper->wrapper(sub { say "Hi there, world" });
これは、いくつかのブロックをラップする非常に便利な方法です。つまり、追加のテキストを提供したり、条件付きでコードを実行したり、エラー処理が同じままであるコードの周りに eval をラップしたりします (たとえば、いくつかのコードを評価してエラーを記録し、ユーザーを記録するなど)。 )。
私が何かを見逃していない場合、回線ノイズが多すぎずにこのようなことを達成するための半便利な回避策または代替方法はありますか?