首先在Moose对象数组上使用List :: Util

时间:2017-09-14 11:33:45

标签: arrays perl moose

我有一个名为aTestCaseList的数组,它被初始化并填充了“Testcase”类型的(Moose)对象。正如所料,我可以打印出TestName中每个Testcase对象的属性aTestCaseList。但是当我尝试使用https://perldoc.perl.org/List/Util.html#first在名为“Test4”的列表中找到第一个对象时,我收到以下错误

  

无法在未定义的值

上调用方法“TestName”

为什么数组中的对象突然未定义?

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;

1 个答案:

答案 0 :(得分:4)

您忘记从first中导入List::Util功能

use List::Util qw(first);