■
そろそろ何したいのかわからなくなりそう。MooseでいったらRoleつけたりはずしたりしたい。継承ツリー直接いじるとか筋が悪いってレベルじゃないし。
package Foo; sub new { bless {}, shift } package Bar; sub bar { 'bar' } package main; use Perl6::Say; my $foo = Foo->new; say +$foo->can('bar') ? $foo->bar : 'cant call $foo->bar'; # => cant call $foo->bar push @Foo::ISA, 'Bar'; say +$foo->can('bar') ? $foo->bar : 'cant call $foo->bar'; # => bar @Foo::ISA = grep { $_ ne 'Bar' } @Foo::ISA; say +$foo->can('bar') ? $foo->bar : 'cant call $foo->bar'; # => cant call $foo->bar
Mooseでadd_role
だけじゃなくremove_role
的なものがあったらすぐにそれ使うんだけどなぁ。少なくとも今回はmeta->make_immutable
いらないんだし。
追記
Mooseも@ISA
いじるのもやめた。かわりにシンボルテーブルいじりまくりなコードになったし、いくつか気になる点もあるけど、とりあえず解決。