如何在Perl中创建对象检查?

时间:2011-05-18 10:54:27

标签: perl object

在我的剧本中,我有类似

的内容
my $region = $self->Functiontofind( $tag );

my $value1 = $region->getValue1;
my $value2 = $region->getValue2;

$ region是一个对象,在某些情况下$ area可能是空的,即如果标记为空,我想检查对象是否为空。我们应该怎么做。

if (defined ($region))似乎不起作用。

谢谢,

4 个答案:

答案 0 :(得分:3)

您应该检查Functiontofind可以返回的值,可能是:0 =错误,1 =成功等等。

如前所述,理想情况下,undef未创建(正如您所说)。

顺便说一句,我猜这篇文章与这篇文章无关,但这让我想起了Moose Predicate和更清晰的方法的用法,它们对于明确区分false或undefined非常有用属性值和尚未设置的属性。

答案 1 :(得分:1)

尝试:

use Data::Dumper;
print Dumper $region;

这会告诉你$region到底是什么。

我怀疑这会奏效:

use Scalar::Util;
if( defined( $region ) && ref( $region ) && blessed( $region )){

请参阅:

perldoc Data :: Dumper

perldoc Scalar :: Util并搜索/ blessed /

答案 2 :(得分:1)

如果Functiontofind在找不到任何内容时返回undef以外的内容,那么您必须找出在这种情况下返回的内容,并构建您的测试它。如果它仍然是某种对象,但不同类型,ref可能会做,或可能isa(来自UNIVERSAL)。

但是你的模块可能只返回同一个类的对象,但是有些属性为空。您可能需要测试...在这种情况下,我建议添加一个方法来测试此类的对象是否为空。

答案 3 :(得分:-1)

理想情况下,我会Functiontofind返回始终的内容,然后使用$region之类的isEmpty方法来确定它是否为空如果找不到匹配,则不返回任何内容。但是,如果需要,可以测试是否$region == undef以查看是否未定义。