Архив документации OpenNet.ru / Раздел "Perl" / Индекс

Как найти уникальные ключи в двух хешах?

Во первых нужно извлечь ключи из хешей и затем выбирать уникальные элементы из массива:

        %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;

Архив документации на OpenNet.ru