my %hash; for my $element (@array) { my ($prefix, $first, $second) = $element =~ /^([A-Z])(\d+):(\d+)$/; my @matches = ( $prefix . '0:' . $second - 1, $prefix . $first * 2 . ':' . $second - 1); $hsh{$element} = [ grep { $_ eq $matches[0] or $_ eq $matches[1] } @array ]; }