アレイにはスカラーしか含めることができない場合。あなたはData::Compare
を試してみることができます。数値配列を使用した例を示します。詳細については、Data::compare
のプラグインを書き込む必要があります(Data::Compare::Plugins
を参照)。
test.pl:
use lib '.';
use strict;
use warnings;
use Data::Compare;
my $h1 = { a => {b => [2, 1, 3] }, c => 3};
my $h2 = { a => {b => [1, 2, 3] }, c => 3};
print 'The structures $h1 and $h2 are ',
Compare($h1, $h2) ? "" : "not ", "identical.\n";
./Data/Compare/Plugins/ArrayBag.pm:test.pl
を実行しているから
package Data::Compare::Plugins::ArrayBag;
use strict;
use warnings;
use Data::Compare;
sub _register {
return [
['ARRAY', 'ARRAY', \&array_compare],
];
}
sub array_compare {
my($a1, $a2) = @_;
return 0 if (scalar @$a1) != (scalar @$a2);
my @ar1 = sort { $a <=> $b } @$a1;
my @ar2 = sort { $a <=> $b } @$a2;
for my $i (0..$#ar1) {
return 0 if $ar1[$i] != $ar2[$i];
}
return 1;
}
_register();
出力:
The structures $h1 and $h2 are identical.
どのような比較をお考えですか?データ構造が同一かどうかをチェックするには?すべての配列要素が等しく、すべてのハッシュキーが一致しますか? –
はい、すべてのアイテム/ハッシュが同じキー/値を持つかどうかを比較します。同じ要素を含むすべての配列は、順序に依存しません。 メソッドは2つの参照(Test :: Deepとよく似ています)を取得し、型、ネスティング、およびトポロジ自体を取り出します。差異はリターンまたは少なくともログに記録されている必要があります。 – user2219195
配列にスカラー以外のものを含めることはできますか?私。サブ配列またはハッシュ?もしそうなら、どうすれば正しい注文を決めることができますか?例えば。どの配列refをどの配列refと比較すべきか? –