井上です。
蛇足を。
ねこ丸 さんは書きました:
>> refでいけます。以下はperldoc -f refより:
>>
>> If the referenced object has been blessed into a package, then that package
>> name is returned instead.
>
> ひーさしぶりに一発解答キター(ぐるぐる回ってるAA)
> 上の引用のあとに
>
>> You can think of "ref" as a "typeof" operator.
>
> と書かれていますね。そのものズボリ。
まさに ref は typeof 演算子のように働くので,もし対象とする $var が
blessed reference でない reference の場合(オブジェクトでないリファレンスの
場合),ref ではパッケージ名ではない何かが返ってきてしまいます。
例えば ref [] だと 'ARRAY' が出てきますので,注意が必要です。
それが気に入らない場合は,安定版では Perl 5.8.0 以降から標準モジュールと
なっている Scalar::Util の blessed を使うと簡潔に解消できます。
http://search.cpan.org/~gbarr/Scalar-List-Utils-1.19/lib/Scalar/Util.pm
use Scalar::Util qw(blessed);
print ref([]); # => ARRAY
print blessed([]); # => undef
print ref(bless [], 'Package'); # => Package
print blessed(bless [], 'Package'); # => Package
--
Kenji Inoue,
Graduate School of Information Science and Technology,
Osaka Institute of Technology