私はMooseを使用しており、プロジェクトでメソッド呼び出しをラップする必要があります。私のラッピングコードが最も外側の修飾子であることが重要です。これまでに行ったことは、メソッド修飾子をMooseロールに配置し、次のようにクラスの最後にそのロールを適用することです。
use Moose::Util;
Moose::Util::apply_all_roles(__PACKAGE__->meta, ('App:Roles::CustomRole'));
__PACKAGE__->meta->make_immutable;
これにより、自分のロールの修飾子が最後に定義されていることを合理的に確認できるため、「前」と「後」の正しい動作が得られます。(役割の「前」と「後」は、最初と最後と呼ばれます。)
もともとはこれで十分だと思っていましたが、今は「アラウンド」と同じようにメソッドをラップする必要があります。Mooseが構築されているClass::MOPは、最初に「around」修飾子を適用するため、「before」の後と「after」の前に呼び出されます。
詳細については、修飾子の現在の呼び出し順序を次に示します。
CUSTOM ROLE before
before 2
before 1
CUSTOM ROLE around
around
method
around
CUSTOM ROLE around
after 1
after 2
CUSTOM ROLE AFTER
私は本当にこのようなものが必要です:
CUSTOM ROLE before
CUSTOM ROLE around
before 2
before 1
around
method
around
after 1
after 2
CUSTOM ROLE around
CUSTOM ROLE AFTER
「around」修飾子を適用/呼び出したい場所に配置する方法についてのアイデアはありますか?シンボルテーブルのハッキングを実行できることは知っていますが(Class :: MOPがすでに実行しているように)、実際には実行したくありません。