>my @file_list = `ls $file_tmp`;Никогда так не делайте, особенно в циклах. Вызывать внешние программы можно только если реализация действия на perl слишком громоздка или проигрывает в скорости. Прочитайте про glob и opendir/readdir/seekdir/итд
>for(my $i=0; $i<scalar(@file_list); $i++)
Это perl а не С, забудьте про циклы такого вида, есть foreach(на самом деле он синоним к for, но для восприятия их различают), есть map. Создавать переменные с индексами в именах еще большая дурость, даже не знаю откуда она, есть же массивы. Примеры:
my @handler_list;
foreach my $name (@file_list) {
my $file;
open($file,"<", "$file_tmp/$name") or die "Can't open $file_tmp/$file_name: $!";
push @handler_list, $file
}
...
foreach my $h (@handler_list) {
@table=<$h>
}
Можно вместо создания переменной и push использовать напрямую элемент массива
foreach my $name (@file_list) {
open($handler_list[scalar(@handler_list)],"<", "$file_tmp/$name") or die "Can't open $file_tmp/$name: $!";
}