Вот ваш код, отредактированный для использования лексических переменных, 3 arg open и оператор map для добавления номеров строк.
my @files = glob("$PATH/*");
foreach my $file (@files){
open my $fh,'<', $file or die $!;
my $i = 1;
my @fileContent = map {$i++.": $_"} <$fh>;
# do something with @fileContent
}
Вот пример, который немного более изощренный (используя большеиз автоматических функций):
for (<$PATH/*>) {
local @ARGV = $_;
my $i = 1;
my @lines = map {$i++.": $_"} <>;
# do something with @lines
}
И вот пример, который использует $.
(номер строки ввода) и цикл while для чтения файла строка за строкой.
for (<$PATH/*>) {
local (@ARGV, $_) = $_;
my @lines;
push @lines, "$.: $_" while <>;
# do something with @lines
}