一時期社内でbless {}, __PACKAGE__が流行っていて、このやり方は継承した際に問題があるので使わない方がよいんじゃないですかねということで問題になるケースをあげてみる。 package Foo; sub new { bless {}, shift; } sub call_foo { my $self = shift; return __PACKAGE__; } package Bar; use base qw(Foo); sub call_bar { my $self = shift; return ref $self; } package Hoge; sub new { bless {}, __PACKAGE__; } sub shared_method { return "Hoge"; } package Fuga; use base qw(Hoge); sub fug