これは私のシナリオです.2つのJSONファイルからデコードされたハッシュが2つあります。Perl - 2つのネストされたハッシュを比較します。
私は2複雑なハッシュを持って、
$hash1 = {k1=> { k11 => v1, k12 => v2}, k2 => { k21 => [v1, v2, v3] }}
$hash2 = {k1=> { k11 => v1, k12 => v2}, k2 => { k21 => [v3, v2, v1] }}
私は平等のためにこれらの2ハッシュを比較したい、とのデータ比較に使用::比較して、テストのis_deeply ::詳しいです。どちらも配列の順序を無視しません。
キー 'k21'の配列値の順序を無視して比較したいと思います。
My Appは配列を 'keys%hash'からランダムに並べ替えます。
Data :: Compareの 'ignore_hash_keys'を試しましたが、ハッシュが複雑になることがあり、無視したくない場合があります。
キー 'k21'はハッシュの配列を持つこともあります。
$hash3 = {k1=> { k11 => v1}, k2 => { k21 => [{v3 => v31}, {v2 => v22}] }}
どのように配列の順序を無視することによって、このような複雑なハッシュを比較しますか。
回答のためのsimbabqueありがとうございます。 ハッシュ内のすべての配列参照を動的に処理するにはどうすればよいですか。 $ hash2が生成され、ネストされたハッシュを含んでいます。どのような配列の比較をバッグ経由で行うべきかを動的にcmp_deeplyに伝えるにはどうすればいいですか? – Girish
おかげさまで@simbabque、どのように私は動的にハッシュ内のすべての配列参照を袋に入れますか? 'my $ arr_of_h1 = {'a' => [1,2,3]、b => [{2 => 1}、{1 => 1}、{3 => 1}]}; ' ' {'cmp_deeply({1}}、{1}、{2}、{3}、{1} $ strtは上で動作しますが、以下はバッグの比較を実行することで動作するようにしたいと考えています。 'cmp_deeply($ arr_of_h1、$ arr_of_h2、"ハッシュは等しい "); ' – Girish
@user私はあなたがそれを構築しなければならないと思います。あるいは、いくつかのフックメカニズムがあります。あなたは完全なTest :: Deepドキュメントを読んだことがありますか?それ以外の場合は、https://metacpan.org/pod/Data::Visitorなどを使用して同様の方法でトラバーサルを構築できます。最初の質問とは違うので、新しい質問をすることをお勧めします。 – simbabque