休息后我正在研究perl。如果我不清楚请问。
我有哈希哈希。
REST123=>{'test' => 'A',
'test1'=> 'B',
'test2'=> 'C'
'test3'=> 'D'
}
REST425=>{'test' => 'A',
'test1'=> 'C',
'test2'=> 'C'
'test3'=> 'B'
}
REST234=>{'test' => 'A',
'test1'=> 'B',
'test2'=> 'C'
'test3'=> 'D'
}
我想比较所有REST *中的ABCD.REsult应该是这样的。
REST123 REST425 4 1(mismatch)
REST123 REST234 4 0 (mismatch)
我尝试在另一个上复制哈希,但这不起作用。任何简单的方式来访问它们进行比较都会非常感激
谢谢
答案 0 :(得分:0)
我不得不猜一下,但我的水晶球告诉我你需要以下代码。
#!/usr/bin/perl
use warnings;
use strict;
my %hash
= (
REST123 => { test => 'A',
test1 => 'B',
test2 => 'C',
test3 => 'D',
},
REST425 => { test => 'A',
test1 => 'C',
test2 => 'C',
test3 => 'B',
},
REST234 => { test => 'A',
test1 => 'B',
test2 => 'C',
test9 => 'D',
},
);
for my $k1 (keys %hash) {
for my $k2 (grep $k1 gt $_, keys %hash) {
my %h;
$h{$_} ++ for map keys %{ $hash{$_} }, $k1, $k2;
my @same = grep $h{$_} == 2, keys %h;
print join ' ', $k1, $k2, scalar @same,
scalar grep $hash{$k1}{$_} ne $hash{$k2}{$_}, @same;
print "\n";
}
}
请注意,它会返回2个不匹配项,而不是1,因为'B' ne 'C'
(test1)和'D' ne 'B'
(test3)。