blessされたオブジェクトか、クラス名の文字列

の判定。


screenshotUNIVERSAL::isa($hoge, 'Huga') を使うべきではない - daily dayflower


つまり真面目にやろうと思うと、

use Scalar::Util qw/blessed/;

if( (!ref $obj || blessed($obj)) && $obj->isa('Hoge') ) {
	# ...
}

こうなるわけですか、ううむ。きちゃない。

とりあえずモジュール化した方が綺麗に見えそうなんで書いてみた。

package Classed;
use strict;
use warnings;
use Scalar::Util qw/blessed/;
use base qw/Exporter/;

our $VERSION   = '0.01';
our @EXPORT_OK = qw/classed/;

sub classed {
    my $proto = shift;
    return !ref $proto || blessed($proto);
}

1;

で、

use Classed qw/classed/;

if( classed($obj) && $obj->isa('Hoge') ) {
	# ...
}

こう。

まだまし?

ネーミングはどうかとは思うけども。

・・・まぁevalでやるのが一番か。