J'ai un tableau appelé aTestCaseList
qui est initialisé et rempli d'objets (Moose) de type "Testcase". Comme prévu, je peux imprimer l'attribut TestName
de chaque objet Testcase
dans aTestCaseList
. Mais lorsque je tente de trouver le premier objet dans la liste nommée « Test4 » à l'aide https://perldoc.perl.org/List/Util.html#first je reçois l'erreur suivanteUtilisation de List :: Util premier sur un tableau d'objets Moose
peut appeler la méthode « TestName » sur une valeur non définie
Pourquoi la objets dans le tableau soudainement indéfini?
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;
Oui, vous avez raison. Je pense que j'ai mal interprété le message d'erreur. Je pensais pour une raison quelconque que les objets eux-mêmes n'étaient pas définis. – airborne
Sans une déclaration pour 'first',' first {$ _-> TestName eq $ sTestcase} @ aTestcaseList' a été interprété comme le '(do {$ _-> TestName eq $ sTestcase}) -> first (@aTestcaseList)' appel de méthode indirecte. '$ _' n'est pas défini, donc' $ _-> TestName' a jeté cette erreur. – ikegami