作者: Kenji Inoue
日時: 2007/8/29(20:05)
井上です。

蛇足を。

ねこ丸 さんは書きました:
>> 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