2011-05-18 67 views
2

在我的剧本,我有这样的事情如何检查一个对象是在Perl中创建的?

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

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

$区是一个对象,在某些情况下,$区域可能是空的,也就是说,如果该标签是空的,我希望做一个检查,看看是否对象是空的或不空的。我们应该怎么做。

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

感谢,

+0

你的意思是'$ region'可能是空的?如果您编辑问题以包含'Functiontofind'的定义,我们将能够最快速地为您提供有用的答案。 – 2011-05-18 12:27:19

+0

“不起作用”非常含糊。你会得到什么,你期待什么? – Ether 2011-05-19 00:42:14

回答

-1

理想情况下,我不得不Functiontofind一些回报总是然后使用$region的方法类似isEmpty什么来决定它是否是空的或不是,而不是如果没有找到匹配返回任何结果。但是,如果你愿意,你可以测试是否$region == undef看它是否没有定义。

+0

@Noufal Ibrahim:你不能测试'$ region == undef',测试一个变量是否被定义的方法是:'defined $ region' – Toto 2011-05-18 11:16:51

+0

我的perl很生锈。你能解释用'undef'进行的平等测试吗?我似乎回忆起使用它来做这样的事情。这是一个例子。 - http://pastebin.com/cRXKW4g9 – 2011-05-18 11:27:42

+0

@Noufal Ibrahim:在这种情况下,它会一直返回,因为你做了一个数值测试'== $ $ region将被转换为0并且undef也是。 – Toto 2011-05-18 12:00:03

3

您应该检查哪些值可以通过Functiontofind返回,这可能是因为:0 =错误1 =成功等

如前所述,理想情况下,其undef不创建(因为你把它)。

顺便说一句,没有这个职位,我想相关的,但是这让我想起了Moose谓语的usefuleness和更清晰的方法这是一个虚假的或未定义的属性值,并且没有一个属性之间的明确区分是非常有用的已设置。

1

尝试:

use Data::Dumper; 
print Dumper $region; 

这会告诉你什么$region真的是。

我怀疑这会工作:

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

参见:

的perldoc数据::自卸车

的perldoc标量::的Util和搜索/祝福/

+2

在* boolean *上下文中,'blessed($ region)'应该就足够了 - 因为布尔上下文不会抱怨undefs。 – Axeman 2011-05-18 12:12:48

1

如果Functiontofind回报除了undef什么都没有发现之外的东西,那么你将不得不找出什么它会在这种情况下返回,并围绕它进行测试。如果它仍然是某种对象,但是类型不同,则可以使用ref,也可能使用isa(从UNIVERSAL)。

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

相关问题