Perl:优雅的方式来检查某些东西是否像包装一样受到祝福?

时间:2014-02-24 06:26:14

标签: perl perl5 bless

我想检查$thing是否是一个受祝福的对象(例如__PACKAGE__)。一个想法是:

use Scalar::Util qw(blessed);

defined blessed $thing && blessed $thing eq __PACKAGE__

是否有更好和/或更优雅的方法可以避免检查是否定义了blessed的返回值?

另一种方法是(blessed $thing or '') eq __PACKAGE__,但我不确定包是否合法地为空。

此外,根据Perl MonksUNIVERSAL::isa($thing, __PACKAGE__)是另一种方式,但这种做法允许更多的事情。

2 个答案:

答案 0 :(得分:11)

您可以使用the predefined ref function

ref($thing) eq __PACKAGE__

那就是说,我认为更宽松的isa实际上是更好的做法。您通常不需要检查对象的类型是否完全

  

[...]我不确定包装是否可以合法地为空。

它不能。 (顺便说一句,如果你试图加入对''的引用,它实际上会被祝福main。如果你有-w或{{1},Perl会警告你这件事。 }。)

答案 1 :(得分:4)

使用CPAN中的Safe::Isa模块:

$possible_object->$_isa('DateTime')