my ($i, %seen) = (0); my @no_dup = grep { 2 < push @{$seen{/(pattern)/}}, $i++ } @with_dup; @no_dup = map { 2 < @$_ ? $no_dup[$_->[0]] : () } values %seen;