在我的剧本中,我有类似
的内容my $region = $self->Functiontofind( $tag );
my $value1 = $region->getValue1;
my $value2 = $region->getValue2;
$ region是一个对象,在某些情况下$ area可能是空的,即如果标记为空,我想检查对象是否为空。我们应该怎么做。
if (defined ($region))
似乎不起作用。
谢谢,
答案 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
以查看是否未定义。