我有一个名为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;
答案 0 :(得分:4)
您忘记从first
中导入List::Util
功能
use List::Util qw(first);