つい先日、2008-07-21 にリリースされた Data::Visitor 0.18 をインストールしたら Data::Visitor::Encode がコンパイルエラー。
Can't locate object method "mk_accessors" via package "Data::Visitor::Encode"
Data::Visitor の Changes には
0.18 - Weak reference support
とさらっと書いてあるんだけど、実は内部的には親クラスが替わっていて……
$ diff -u Visitor.pm.0.17 Visitor.pm.0.18 --- Visitor.pm.0.17 2008-07-20 06:35:58.000000000 +0900 +++ Visitor.pm.0.18 2008-07-22 06:36:29.000000000 +0900 @@ -1,22 +1,33 @@ #!/usr/bin/perl package Data::Visitor; -use base qw/Class::Accessor/; +use Squirrel;
Class::Accessor base から Mouse(Squirrel) Base になったため、Class::Accessor にあるはずの mk_accessors がなくなったので、D::V::Encode がこけたと。
--- lib/Data/Visitor/Encode.pm.orig 2007-11-11 03:40:45.000000000 +0900 +++ lib/Data/Visitor/Encode.pm 2008-07-24 03:46:54.000000000 +0900 @@ -13,7 +13,14 @@ BEGIN { our $VERSION = '0.09000'; - __PACKAGE__->mk_accessors('visit_method', 'extra_args'); + if ( Data::Visitor->VERSION >= 0.18 ) { + use Squirrel; + has 'visit_method' => ( is => 'rw' ); + has 'extra_args' => ( is => 'rw' ); + } + else { + __PACKAGE__->mk_accessors('visit_method', 'extra_args'); + } }
こんな風に Data::Visitor のバージョンで分岐するか、いっそ use Data::Visitor 0.18 しちゃってもいいのかも。
RTに登録すべきかな。
[追記]
Mouse base になった Data::Visitor::Encode-0.10001 がリリースされました。