use Moose -extends => [@superclass];

Mooseコンパイル時にextends()できたらいいのに、と思いエクスポートコマンド化してみた。

http://github.com/nothingmuch/moose/tree/topic/extends_export_command

package Foo;
use Moose;

package Bar;
use Moose -extends => 'Foo';

package main;
use Test::More;
isa_ok( Bar->new, 'Foo' );
done_testing;
__END__

これでBEGIN{ extends 'Foo' }などとしなくてすむ。

with()も同様にエクスポートコマンド化できるかと思ったが、こちらはうまく行かなかった。考えてみれば、クラスの初期化がある程度終わってからでないとメソッドのチェックなどはできないので、これは仕方がない。