2017-09-14 58 views
1

我有一個名爲aTestCaseList的數組,它被初始化並填充了類型爲「Testcase」的(Moose)對象。正如所料,我可以打印出aTestCaseList中每個Testcase對象的屬性TestName。但是,當我試圖找到名爲「TEST4」列表中的第一個對象使用https://perldoc.perl.org/List/Util.html#first我收到以下錯誤首先在一個駝鹿對象的數組上使用List :: Util

不能調用方法「測試名」未定義的值

爲什麼是數組中的對象突然未定義?

use Testcase; 

my @aTestcaseList=(); 
for (my $i=1; $i <= 9; $i++) { 
    push(@aTestcaseList,Testcase->new("Test".$i)); 
} 
my $sTestcase="Test4"; 
foreach my $sTestDummy(@aTestcaseList) 
{ 
    #Works as expected and prints: Test1 Test2 Test3 ... Test9 
    print $sTestDummy->TestName." "; 
} 
# throws the error: 
my $sFindTest=first {$_->TestName eq $sTestcase} @aTestcaseList; 

package Testcase; 
use Moose; 
use namespace::autoclean; 

has 'TestName' => (is =>'ro',isa=>'Str'); 

around BUILDARGS => sub 
{ 
    my $orig = shift; 
    my $class = shift; 

    if (@_ == 1 && ! ref $_[0]) { 
     return $class->$orig(TestName => $_[0]); 
    } 
    else { 
     return $class->$orig(@_); 
    } 
}; 
__PACKAGE__->meta->make_immutable; 
1; 

回答

4

你忘了從List::Util導入功能first

use List::Util qw(first); 
+0

是的,你是對的。我想我誤解了錯誤信息。我由於某種原因認爲對象本身是未定義的。 – airborne

+2

沒有'first'的聲明,'first {$ _-> TestName eq $ sTestcase} @ aTestcaseList'被解釋爲'(do {$ _-> TestName eq $ sTestcase}) - > first(@aTestcaseList)間接方法調用。 '$ _'未定義,所以'$ _-> TestName'拋出該錯誤。 – ikegami

相關問題