スタンドアロンのユーティリティクラスではなく、親のMooseクラス内からいくつかのヘルパーメソッドを設定する方法を探しています。可能であれば、ヘルパーモジュールを明示的に要求する必要がないため(すべてがextends
宣言を介して行われるため)、モジュールにムースシュガーを追加するより透過的な方法になります。
ドキュメントで提供されている例に基づいて、これは大まかに私が目指していることです:
package Parent;
use Moose;
Moose::Exporter->setup_import_methods(
with_meta => [ 'has_rw' ],
as_is => [ 'thing' ],
also => 'Moose',
);
sub has_rw {
my ( $meta, $name, %options ) = @_;
$meta->add_attribute(
$name,
is => 'rw',
%options,
);
}
# then later ...
package Child;
use Moose;
extends 'Parent';
has 'name';
has_rw 'size';
thing;
ただし、これは機能しません。
perl -I. -MChild -wle'$obj = Child->new(size => 1); print $obj->size'
演算子がChild.pmの10行目で「has_rw'size'」の近くにあると予想される場所に文字列が見つかりました (has_rwを事前に宣言する必要がありますか?) 「has_rw'size'」の近くのChild.pm行10での構文エラー Child.pmの12行目で「strictsubs」が使用されている間は、ベアワード「thing」は許可されません。 コンパイルはrequireで失敗しました。 BEGINが失敗しました-コンパイルが中止されました。
PS。with Role;
また、エクスポートマジックを(ではなく)ロールに移動しようとしましたextends Parent;
が、同じエラーが発生します。