1
私はaTestCaseList
という配列を持っています。この配列は初期化され、 "Testcase"型の(Moose)オブジェクトで埋められています。予想どおり、私はの属性Testcase
をaTestCaseList
に印刷することができます。私はhttps://perldoc.perl.org/List/Util.html#firstを使用して「TEST4」という名前のリストの最初のオブジェクトを検索しようとすると、しかし、私は、なぜ次のエラーList :: UtilをまずMooseオブジェクトの配列に使用する
は未定義値で「テスト名」
のメソッドを呼び出すことはできません取得します配列のオブジェクトが突然未定義ですか?
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
をインポートするのを忘れました。私はエラーメッセージを間違って解釈したと思います。何らかの理由でオブジェクト自体が定義されていないと思った。 – airborne'first {$ _-> TestName eq $ sTestcase} @ aTestcaseList'の宣言が '(do {$ _-> TestName eq $ sTestcase}) - >最初の(@aTestcaseList)'として解釈されました。間接メソッド呼び出し。 '$ _'は定義されていないので、' $ _-> TestName'はそのエラーを投げました。 – ikegami