Perlでオブジェクト指向を復習中
ところで
my $counter = {"value" => 0}; print "$counter\n"; # HASH(0x1008001f0) bless $counter, Counter; print "$counter\n"; # Counter=HASH(0x1008001f0)
てなことをやるとuse strict時には「Bareword "Counter" not allowed」って言われる。bless $counter, "Counter";なら大丈夫。
説明の都合で明示的にパッケージと参照をblessしたいわけなのだが、文字列でやるのはどうなんだろうか?パッケージがファーストクラスのオブジェクトであるような誤解をさせないために明示的に文字列でblessするべきなのか、それとも余計なことに気を取らせないためにBarewordでやっちゃうべきなのか。もちろん普通はCounter->newとかで呼ぶから実用上これが問題になるケースはないんだろうけど。
use strict; use warnings; { package Counter; sub push{ my $values = shift; $values->{count}++; print "$values->{count}匹\n"; } sub new{ my $class = shift; my $values = {count => shift}; bless $values, $class; } } { my $counter = {"value" => 0}; print "$counter\n"; # HASH(0x1008001f0) bless $counter, "Counter"; print "$counter\n"; # Counter=HASH(0x1008001f0) $counter->push; # 1匹 $counter->push; # 2匹 my $c2 = Counter->new; $c2->push; # 1匹 $counter->push; # 3匹 }