Со ссылкой на предыдущий вопрос Как прочитать n строк над совпавшей строкой в perl? Сохранение нескольких совпадений в массиве:
while (<$fh>) {
push @array, $_;
shift @array if @array > 4;
if (/script/) {
print @array;
push @found, join "", @array; # <----- this line
}
}
Вы можете просто использовать скаляр, например$found = join "", @array
, но тогда вы будете хранить только последнее совпадение в цикле.
Предположим, что цикл завершен, и теперь у вас есть все совпадения в массиве @found
.Если вы хотите, чтобы они были в скаляре, просто присоединитесь снова:
my $found = join "", @found;
Или вы можете просто добавить их все сразу в цикле:
$found .= join "", @array;
Все зависит от того, что вы собираетесьделать с данными.Наличие данных в скаляре редко бывает выгоднее, чем иметь их в массиве.Например, если вы собираетесь его распечатать, разницы нет, поскольку print $found
эквивалентно print @found
, поскольку print
принимает список аргументов.
Если вы намереваетесь интерполироватьсоответствует строке:
print "Found matches: $found";
print "Found matches: ", @found;