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

Using List::Util first on an array of Moose objects

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

Can't call method "TestName" on an undefined value

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

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;

您忘记从 List::Util 导入函数 first 就像

use List::Util qw(first);