Нет необходимости читать весь файл в память только для того, чтобы разбить его обратно на строки и выполнить итерации по строкам.Это сделает объем памяти вашей программы пропорциональным размеру всего входного файла.
С другой стороны, чтение файла построчно будет сохранять этот объем пропорциональным размеру самой длинной строки., который, как правило, гораздо меньше.Чтение файлов построчно, когда вы собираетесь обрабатывать их построчно, также сделает ваш код проще.
#!/usr/bin/perl
use warnings; use strict;
use YAML;
print Dump process_file(\*DATA);
sub process_file {
my ($fh) = @_;
my %hash;
while ( my $line = <$fh> ) {
next unless $line =~ /^[0-9]/;
my ($val, undef, $read, $write) = split ' ', $line;
@{ $hash{ $val } }{qw( read write )} = ($read, $write);
}
return \%hash;
}
__DATA__
something in this line 2
something in this line 3
something in this lin 4
something in this line 5
something in this line 6
something in this line 6
something in this line 7
value text Read Write
------------------------------------------------
1 1 82090 62337
2 2 27177 39042
3 3 73 5708
4 4 170 749