Perl - 遍历(散列和标量的散列)的散列?
Perl - traversing hash of (hashes of hashes and scalars)?
我生成了一个看起来像这样的散列。 (使用 Dumper 打印)
$VAR1 = {
'sufia:s4655g60k' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '44d88612fea8a8f36de82e1278abb02f',
'checksum.old' => '44d88612fea8a8f36de82e1278abb02f',
'name' => 'eicar.com.txt',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/47/info%3Afedora%2Fsufia%3As4655g60k%2Fcontent%2Fcontent.0'
}
},
'sufia:9z9031393' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'b502be8d9e1286c94506c91c191c0b5a',
'checksum.old' => 'b502be8d9e1286c94506c91c191c0b5a',
'name' => 'Elsevier RightsLink Printable License.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/d9/info%3Afedora%2Fsufia%3A9z9031393%2Fcontent%2Fcontent.0'
}
},
'sufia:s4655g65z' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '1baaa38b3e7b6139b3847b7bb3b8644a',
'checksum.old' => '1baaa38b3e7b6139b3847b7bb3b8644a',
'name' => 'enso-crystal.jpg',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/3a/info%3Afedora%2Fsufia%3As4655g65z%2Fcontent%2Fcontent.0'
}
},
'sufia:d504rk35q' => {
'version.2' => {
'checksum.new' => '9e5422337c33fa83322fd287035e4ac5',
'checksum.old' => '9e5422337c33fa83322fd287035e4ac5',
'name' => '0501012.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/c4/info%3Afedora%2Fsufia%3Ad504rk35q%2Fcontent%2Fcontent.2'
},
'curVer' => 2,
'version.1' => {
'checksum.new' => 'a50e552f4776f1863050b89920c9f7eb',
'checksum.old' => 'a50e552f4776f1863050b89920c9f7eb',
'name' => '0501012.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/d1/info%3Afedora%2Fsufia%3Ad504rk35q%2Fcontent%2Fcontent.1'
},
'version.0' => {
'checksum.new' => 'b05398d3071808b880af4375f6cdf18d',
'checksum.old' => 'b05398d3071808b880af4375f6cdf18d',
'name' => '0501012.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/80/info%3Afedora%2Fsufia%3Ad504rk35q%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903124g' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'cd022d22cb5c46bf0e3f6c3b4c929ae1',
'checksum.old' => 'cd022d22cb5c46bf0e3f6c3b4c929ae1',
'name' => 'GT Contributor - Consent to Publish 2015-LindaNewman.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/04/info%3Afedora%2Fsufia%3A9z903124g%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903137j' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'c2a24f16cb62d765810af770510516d1',
'checksum.old' => 'c2a24f16cb62d765810af770510516d1',
'name' => 'ScholarAtUC-SplashPage-Revisions4-29-3F.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/99/info%3Afedora%2Fsufia%3A9z903137j%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903133f' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '9d1a7f558548815dbb8be639c315f367',
'checksum.old' => '9d1a7f558548815dbb8be639c315f367',
'name' => 'UCScienceNet Expansion Award Proposal-Isilon-To-APTrust.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/70/info%3Afedora%2Fsufia%3A9z903133f%2Fcontent%2Fcontent.0'
}
},
'sufia:9z9031279' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '6e763df35f2d807eac2763a87c6bb0bb',
'checksum.old' => '6e763df35f2d807eac2763a87c6bb0bb',
'name' => 'IMG_2221.JPG',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/52/info%3Afedora%2Fsufia%3A9z9031279%2Fcontent%2Fcontent.0'
}
},
'sufia:9z9031414' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '621a177b09602ce1f703dd4becd90fe8',
'checksum.old' => '621a177b09602ce1f703dd4becd90fe8',
'name' => 'MazdaLiveAssistance-Not.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/0d/info%3Afedora%2Fsufia%3A9z9031414%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903122x' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'a6653aac025f0eccbc5f96226923c79a',
'checksum.old' => 'a6653aac025f0eccbc5f96226923c79a',
'name' => 'example.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/41/info%3Afedora%2Fsufia%3A9z903122x%2Fcontent%2Fcontent.0'
}
},
'sufia:s4655g624' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '44d88612fea8a8f36de82e1278abb02f',
'checksum.old' => '44d88612fea8a8f36de82e1278abb02f',
'name' => 'NotAVirusIPromise.txt',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/c6/info%3Afedora%2Fsufia%3As4655g624%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903131w' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'f8f82d7f4d7a20839a20a9dd375f6478',
'checksum.old' => 'f8f82d7f4d7a20839a20a9dd375f6478',
'name' => 'UCScienceNet Expansion Award Proposal-LangsamLibrary.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/8d/info%3Afedora%2Fsufia%3A9z903131w%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903152n' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'e5c6bde4b0fa6c4f2e013656f6aa8bf5',
'checksum.old' => 'e5c6bde4b0fa6c4f2e013656f6aa8bf5',
'name' => '20950 dod.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/c9/info%3Afedora%2Fsufia%3A9z903152n%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903118b' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '99ada40eb1ad4c5f5bffe07108855dc6',
'checksum.old' => '99ada40eb1ad4c5f5bffe07108855dc6',
'name' => 'harvey1880.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/4d/info%3Afedora%2Fsufia%3A9z903118b%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903144z' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'a6653aac025f0eccbc5f96226923c79a',
'checksum.old' => 'a6653aac025f0eccbc5f96226923c79a',
'name' => 'example.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/f4/info%3Afedora%2Fsufia%3A9z903144z%2Fcontent%2Fcontent.0'
}
},
'sufia:9z9031350' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '23013ce2bb7203fff545cf6e9ec5ac4a',
'checksum.old' => '23013ce2bb7203fff545cf6e9ec5ac4a',
'name' => 'ScholarAtUC-SplashPage-Revisions4-29-1D.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/6e/info%3Afedora%2Fsufia%3A9z9031350%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903129v' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '93fd70923362e02b4fb56bb137bcf1e2',
'checksum.old' => '93fd70923362e02b4fb56bb137bcf1e2',
'name' => 'DevTeam2.jpg',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/94/info%3Afedora%2Fsufia%3A9z903129v%2Fcontent%2Fcontent.0'
}
}
};
已查看 How to iterate through Hash (of Hashes) in Perl?,但无法为我工作。
需要遍历所有看起来像 'sufia:s4655g60k' 的键,然后对于每个键,我需要提取 'curVer' 并根据我需要的 'curVer' 的数量循环 'version.0' 以获取键的相应值。
如何遍历此散列和 read/update 现有 keys/values?
for my $key (keys(%$VAR1)) {
my $rec = $VAR1->{$key};
my $cur_ver = $rec->{curVer};
my $subrec = $rec->{"version.$cur_ver"};
my $checksum_new = $subrec->{'checksum.new'};
my $checksum_old = $subrec->{'checksum.old'};
my $name = $subrec->{name};
my $path = $subrec->{path};
...
}
我生成了一个看起来像这样的散列。 (使用 Dumper 打印)
$VAR1 = {
'sufia:s4655g60k' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '44d88612fea8a8f36de82e1278abb02f',
'checksum.old' => '44d88612fea8a8f36de82e1278abb02f',
'name' => 'eicar.com.txt',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/47/info%3Afedora%2Fsufia%3As4655g60k%2Fcontent%2Fcontent.0'
}
},
'sufia:9z9031393' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'b502be8d9e1286c94506c91c191c0b5a',
'checksum.old' => 'b502be8d9e1286c94506c91c191c0b5a',
'name' => 'Elsevier RightsLink Printable License.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/d9/info%3Afedora%2Fsufia%3A9z9031393%2Fcontent%2Fcontent.0'
}
},
'sufia:s4655g65z' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '1baaa38b3e7b6139b3847b7bb3b8644a',
'checksum.old' => '1baaa38b3e7b6139b3847b7bb3b8644a',
'name' => 'enso-crystal.jpg',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/3a/info%3Afedora%2Fsufia%3As4655g65z%2Fcontent%2Fcontent.0'
}
},
'sufia:d504rk35q' => {
'version.2' => {
'checksum.new' => '9e5422337c33fa83322fd287035e4ac5',
'checksum.old' => '9e5422337c33fa83322fd287035e4ac5',
'name' => '0501012.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/c4/info%3Afedora%2Fsufia%3Ad504rk35q%2Fcontent%2Fcontent.2'
},
'curVer' => 2,
'version.1' => {
'checksum.new' => 'a50e552f4776f1863050b89920c9f7eb',
'checksum.old' => 'a50e552f4776f1863050b89920c9f7eb',
'name' => '0501012.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/d1/info%3Afedora%2Fsufia%3Ad504rk35q%2Fcontent%2Fcontent.1'
},
'version.0' => {
'checksum.new' => 'b05398d3071808b880af4375f6cdf18d',
'checksum.old' => 'b05398d3071808b880af4375f6cdf18d',
'name' => '0501012.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/80/info%3Afedora%2Fsufia%3Ad504rk35q%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903124g' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'cd022d22cb5c46bf0e3f6c3b4c929ae1',
'checksum.old' => 'cd022d22cb5c46bf0e3f6c3b4c929ae1',
'name' => 'GT Contributor - Consent to Publish 2015-LindaNewman.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/04/info%3Afedora%2Fsufia%3A9z903124g%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903137j' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'c2a24f16cb62d765810af770510516d1',
'checksum.old' => 'c2a24f16cb62d765810af770510516d1',
'name' => 'ScholarAtUC-SplashPage-Revisions4-29-3F.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/99/info%3Afedora%2Fsufia%3A9z903137j%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903133f' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '9d1a7f558548815dbb8be639c315f367',
'checksum.old' => '9d1a7f558548815dbb8be639c315f367',
'name' => 'UCScienceNet Expansion Award Proposal-Isilon-To-APTrust.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/70/info%3Afedora%2Fsufia%3A9z903133f%2Fcontent%2Fcontent.0'
}
},
'sufia:9z9031279' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '6e763df35f2d807eac2763a87c6bb0bb',
'checksum.old' => '6e763df35f2d807eac2763a87c6bb0bb',
'name' => 'IMG_2221.JPG',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/52/info%3Afedora%2Fsufia%3A9z9031279%2Fcontent%2Fcontent.0'
}
},
'sufia:9z9031414' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '621a177b09602ce1f703dd4becd90fe8',
'checksum.old' => '621a177b09602ce1f703dd4becd90fe8',
'name' => 'MazdaLiveAssistance-Not.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/0d/info%3Afedora%2Fsufia%3A9z9031414%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903122x' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'a6653aac025f0eccbc5f96226923c79a',
'checksum.old' => 'a6653aac025f0eccbc5f96226923c79a',
'name' => 'example.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/41/info%3Afedora%2Fsufia%3A9z903122x%2Fcontent%2Fcontent.0'
}
},
'sufia:s4655g624' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '44d88612fea8a8f36de82e1278abb02f',
'checksum.old' => '44d88612fea8a8f36de82e1278abb02f',
'name' => 'NotAVirusIPromise.txt',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/c6/info%3Afedora%2Fsufia%3As4655g624%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903131w' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'f8f82d7f4d7a20839a20a9dd375f6478',
'checksum.old' => 'f8f82d7f4d7a20839a20a9dd375f6478',
'name' => 'UCScienceNet Expansion Award Proposal-LangsamLibrary.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/8d/info%3Afedora%2Fsufia%3A9z903131w%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903152n' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'e5c6bde4b0fa6c4f2e013656f6aa8bf5',
'checksum.old' => 'e5c6bde4b0fa6c4f2e013656f6aa8bf5',
'name' => '20950 dod.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/c9/info%3Afedora%2Fsufia%3A9z903152n%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903118b' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '99ada40eb1ad4c5f5bffe07108855dc6',
'checksum.old' => '99ada40eb1ad4c5f5bffe07108855dc6',
'name' => 'harvey1880.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/4d/info%3Afedora%2Fsufia%3A9z903118b%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903144z' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => 'a6653aac025f0eccbc5f96226923c79a',
'checksum.old' => 'a6653aac025f0eccbc5f96226923c79a',
'name' => 'example.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/f4/info%3Afedora%2Fsufia%3A9z903144z%2Fcontent%2Fcontent.0'
}
},
'sufia:9z9031350' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '23013ce2bb7203fff545cf6e9ec5ac4a',
'checksum.old' => '23013ce2bb7203fff545cf6e9ec5ac4a',
'name' => 'ScholarAtUC-SplashPage-Revisions4-29-1D.pdf',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/6e/info%3Afedora%2Fsufia%3A9z9031350%2Fcontent%2Fcontent.0'
}
},
'sufia:9z903129v' => {
'curVer' => 0,
'version.0' => {
'checksum.new' => '93fd70923362e02b4fb56bb137bcf1e2',
'checksum.old' => '93fd70923362e02b4fb56bb137bcf1e2',
'name' => 'DevTeam2.jpg',
'path' => '/opt/rails-apps/curate_app/jetty/fedora/default/data/datastreamStore/94/info%3Afedora%2Fsufia%3A9z903129v%2Fcontent%2Fcontent.0'
}
}
};
已查看 How to iterate through Hash (of Hashes) in Perl?,但无法为我工作。
需要遍历所有看起来像 'sufia:s4655g60k' 的键,然后对于每个键,我需要提取 'curVer' 并根据我需要的 'curVer' 的数量循环 'version.0' 以获取键的相应值。
如何遍历此散列和 read/update 现有 keys/values?
for my $key (keys(%$VAR1)) {
my $rec = $VAR1->{$key};
my $cur_ver = $rec->{curVer};
my $subrec = $rec->{"version.$cur_ver"};
my $checksum_new = $subrec->{'checksum.new'};
my $checksum_old = $subrec->{'checksum.old'};
my $name = $subrec->{name};
my $path = $subrec->{path};
...
}