Class::Method::Modifiers::Fastのバグ

Class::Method::Modifiers::FastのバグはてっきりRoleが継承ではなくサブルーチンのコピーで機能の拡張をしていることが原因だと思ったのだが,よく検討してみるとMouseのバグのような気がしてきた。
以下のようにすると問題は起きない*1

Index: lib/Mouse/Meta/Role.pm
===================================================================
--- lib/Mouse/Meta/Role.pm	(revision 7618)
+++ lib/Mouse/Meta/Role.pm	(working copy)
@@ -91,12 +91,12 @@
                 # XXX what's Moose's behavior?
                 #next;
             } else {
-                *{"${classname}::${name}"} = *{"${selfname}::${name}"};
+                *{"${classname}::${name}"} = \&{"${selfname}::${name}"};
             }
             if ($args{alias} && $args{alias}->{$name}) {
                 my $dstname = $args{alias}->{$name};
                 unless ($classname->can($dstname)) {
-                    *{"${classname}::${dstname}"} = *{"${selfname}::${name}"};
+                    *{"${classname}::${dstname}"} = \&{"${selfname}::${name}"};
                 }
             }
         }

一般的に言って,型グロブのコピーは何が起きるか非常に分かりにくい。だから,どうしても必要なとき以外は避けるべきだと思う。この場合はコードリファレンスで十分だ。

*1:このパッチはRTで報告済み。