package Foo; use strict; use warnings; use Class::Accessor::Lite( new => 1, ro => [qw(prop)] ); sub foo { my $self = shift; return prop; }
これはちゃんと動かない。正しくは
package Foo; use strict; use warnings; use Class::Accessor::Lite( new => 1, ro => [qw(prop)] ); sub foo { my $self = shift; return $self->prop; }
のように、$self->prop
しないとClass::Accessor::Lite
は正しく動作しない。まあこれは常識の範囲内だと思うけど、うっかり間違えてprop
と直に書いてしまった。
にもかかわらず、処理系は一応正しく動作してしまう。エラーになるわけでもなく、単にundef
を返すだけの振舞いになってしまうようだ。
prop
と単発で呼び出すと、prop
が引数無しで呼び出されたときと同じ振舞いになるようだ。
このようなシンプルな例だとすぐ気付けそうだけど、コードベースが複雑だとぜんだん気付かなかったりする。
これで一回ハマって静かにコードが壊れたことがあったので、困るな〜と思った。