我想检查$thing
是否是一个受祝福的对象(例如__PACKAGE__
)。一个想法是:
use Scalar::Util qw(blessed);
defined blessed $thing && blessed $thing eq __PACKAGE__
是否有更好和/或更优雅的方法可以避免检查是否定义了blessed
的返回值?
另一种方法是(blessed $thing or '') eq __PACKAGE__
,但我不确定包是否合法地为空。
此外,根据Perl Monks,UNIVERSAL::isa($thing, __PACKAGE__)
是另一种方式,但这种做法允许更多的事情。
答案 0 :(得分:11)
您可以使用the predefined ref
function:
ref($thing) eq __PACKAGE__
那就是说,我认为更宽松的isa
实际上是更好的做法。您通常不需要检查对象的类型是否完全。
[...]我不确定包装是否可以合法地为空。
它不能。 (顺便说一句,如果你试图加入对''
的引用,它实际上会被祝福main
。如果你有-w
或{{1},Perl会警告你这件事。 }。)
答案 1 :(得分:4)
使用CPAN中的Safe::Isa
模块:
$possible_object->$_isa('DateTime')