Во первых нужно извлечь ключи из хешей и затем выбирать
уникальные элементы из массива:
%seen = ();
for $element (keys(%foo), keys(%bar)) {
$seen{$element}++;
}
@uniq = keys %seen;
или так:
@uniq = keys %{{%foo,%bar}};
если необходимо использовать минимальный размер памяти:
%seen = ();
while (defined ($key = each %foo)) {
$seen{$key}++;
}
while (defined ($key = each %bar)) {
$seen{$key}++;
}
@uniq = keys %seen;
для того, чтобы выбрать повторения из массива можно воспользоваться строчкой:
@uniq=grep{!$hash{$_}++} @mass;
для того, чтобы убрать строки в массиве, содержащие какие-то произвольные одинаковые данные, можно немного модифицировать приведенную строчку:
@uniq=grep{!$hash{$1}++ if m&$name\001($value)\001$other\n&} @mass;