my %data;
foreach my $fn (@ARGV) {
open (my $IN, $fn) or die "couldn't open $fn: $!";
$data{$fn} = join "", <$IN>;
close $fn;
}
foreach my $key (keys %data) {
print "File $key:\n$data{$key}\n\n\n";
}
Код перебирает список имен файлов, в данном случае передаваемых как аргументы командной строки в @ARGV. Для каждого имени файла он открывает дескриптор файла и читает его в контексте массива, который загружает каждую строку файла как элемент массива. В этом случае мы читаем анонимный массив, который передается в объединение. Join склеивает элементы массива вместе, в данном случае с пустой строкой в качестве разделителя. Результат, одна строка со всем содержимым файла, затем сохраняется в хэше с именем файла в качестве ключа. Второй цикл просто печатает результаты.
Обратите внимание, что для больших файлов это хороший способ быстро исчерпать себя. Подумайте о способах обработки ваших данных в потоковом режиме.