Если вы прочитаете файл в список, он займет все сразу
@array = <$fh>; # Reads all lines into array
Сравните это с чтением в скалярном контексте
$singleLine = <$fh>; # Reads just one line
Одновременное чтение всего файла может быть проблемой, но вы поняли.
Тогда вы можете использовать grep
для фильтрации вашего массива.
@filteredArray = grep /fever/, @array;
Затем вы можете получить количество отфильтрованных строк, используя scalar
, который заставляет скалярный (то есть одно значение) контекст интерпретации массива, в этом случае возвращает счет.
print scalar @filteredArray;
Собираем все вместе ...
C:\temp>cat test.pl
use strict; use warnings; # always
my @a=<DATA>; # Read all lines from __DATA__
my @f = grep /fever/, @a; # Get just the fevered lines
print "Filtered lines = ", scalar @f; # Print how many filtered lines we got
__DATA__
abc
fevered
frier
forever
111fever111
abc
C:\temp>test.pl
Filtered lines = 2
C:\temp>