Class::Accessor::Fastにおけるfollow_best_practiceの挙動まとめ
Perlでオブジェクトのアクセッサを生成するライブラリとしてClass::Accessor::Fastがあります。perldocを読むとfollow_best_practiceとするとset_とget_が使えるようになる、とありますが、これをやると使えなくなる種類のアクセッサもあるようです。
そこで、3種類のfollow_best_practiceをかけている場合とかけていない場合で挙動にどのような違いがあるか実験してみました。
follow_best_practiceアリのケース。
package Hoo; use strict; use parent qw/Class::Accessor::Fast/; __PACKAGE__->follow_best_practice; __PACKAGE__->mk_accessors(qw/hoge/); my $object = Hoo->new; # getter $object->set('hoge','this is hoge'); # OK $object->set_hoge('this is hoge'); # OK $object->hoge('this_is_hoge'); # ERROR # setter print $object->get('hoge')."\n"; # OK print $object->get_hoge."\n"; # OK print $object->hoge."\n"; # ERROR
続いて、follow_best_practice無しの場合。
package Hoo; use strict; use parent qw/Class::Accessor::Fast/; __PACKAGE__->mk_accessors(qw/hoge/); my $object = Hoo->new; # getter $object->set('hoge','this is hoge'); # OK $object->set_hoge('this is hoge'); # ERROR $object->hoge('this_is_hoge'); # OK # setter print $object->get('hoge')."\n"; # OK print $object->get_hoge."\n"; # ERROR print $object->hoge."\n"; # OK
getterを中心にまとめると、下記のようになります。
- get('hoge')はどちらのケースでも使える
- hoge()はfollow_best_practiceをかけると使えなくなる
- get_hoge()はfollow_best_practiceをかけないと使えない