На самом деле нет никакой разницы между тем, что вы написали, и этим:
@{$array2d[$i]} = <FILE>;
Я могу только предположить, что вы просматриваете файлы.
Чтобы не отслеживать счетчик, вы можете сделать следующее:
...
push @array2d, [ <FILE> ];
...
Это говорит: 1) создать ссылку на пустой массив, 2) сохранить все строки в FILE, 3) вставить его в @array2d
.