Я полагаю, вы хотите что-то вроде
$ctrno_hash[$ctrno] = \@arr;
Это превратит массив @arr
в array reference
.
Затем вы ссылаетесь на ранее выдвинутую ссылку на массив с
@{$ctrno_hash[$ctrno]}
То есть, если $array_ref
является ссылкой на массив, конструкция @{ $array_ref }
возвращает массив, на который указывает ссылка на массив.
Теперь конструкция $ctrno_hash[$ctrno]
на самом деле не хеш, а обычный массив. Чтобы по-настоящему сделать его хешем, вам нужны фигурные скобки вместо квадратных скобок:
@{$ctrno_hash{$ctrno} } = \@arr;
И, аналогично, вы позже обратитесь к массиву с
@{$ctrno_hash{$ctrno} }
Теперь, сказав это, вы можете отказаться от конструкции if ... exists
:
if ($line =~ /$ctrno/ )
{
print "found\n";
push @{$ctrno_hash{$ctrno}}, $file
}