\@{(grep {$_->Identifier}@aArray1)}
この部分は奇妙です。あなたは@{}
でリストを間接参照しようとしています。それは動作しません。
grep
は既にリストを返します。新しいリストを作成するには、括弧()
を使用する必要はありません。 Perlはそれらを無視します。その後、あなたの@{}
は間違っています。新しい配列参照が必要です。それは[]
です。 grep
が返すリストから新しい配列refを構築します。それは既にList::Compare->new
に渡すには十分です。バックスラッシュ\
は、何かのリファレンスを取りたい場合にのみ必要ですが、すでにリファレンスがあります。
実際にはgrep
は欲しくないです。あなたはmap
したい!
これはコードの外観です。
List::Compare->new('-u', \@aIdentList, [ map { $_->Identifier } @aArray1 ])
grep
あなたはブロックが真の値を返さない場合に渡したリストのすべての要素を除外します。 @aArray1
のすべてのオブジェクト(これは恐ろしいです!)はIdentifier
というプロパティを持っているので、これはすべての要素を通過させます。 new
への2番目の配列ref argは、オブジェクトのリストになります。それは、あなたがオレンジとリンゴを比較するので、あなたが望むものではありません。
代わりに、map
を使用する必要があります。これは、各要素のブロックの戻り値を渡します。それはインラインforeach
ループのようなものです。次に、2番目のリストは、オブジェクト自体ではなく、オブジェクトの実際の識別子になります。
質問が分かりません。あなたは正確に何をしたいですか? – simbabque
私は識別子を持つArray @ aIdentListとTestObjectを持つもう一つのArrayを持っています。私は最初の配列の識別子を2番目の配列の "識別子"属性と比較し、@ unique配列に書かれた@ aIdentListで一意の識別子だけを取得したいと考えています。 – airborne