Вы должны расширить свое регулярное выражение, чтобы захватить имя DLL:
$infostring = lc($infostring);
while ($infostring =~ /dll name: (\S+\.dll)/g) {
print "found dll: $1\n";
}
\S+\.dll
будет соответствовать одному или нескольким непробельным символам, за которыми следует «.dll», а скобки будут собирать соответствующий текст и сохранять его в переменной $1
. (Если бы у вас было несколько наборов круглых скобок, вторая перешла бы в $2
, третья в $3
и т. Д.)
Редактировать: Похоже, что спецификация ввода была изменена путем редактирования вопроса, когда я писал свой ответ ... Выше было бы для одной строки ввода, содержащей все имена DLL. В новом формате, каждый из которых находится на отдельной строке, вместо этого вы хотите использовать:
while (my $infostring = <$input_filehandle>) {
$infostring = lc($infostring);
print "found dll: $1\n" if $infostring =~ /dll name: (\S+\.dll)/;
}
Нет необходимости связываться с /g
в регулярном выражении или циклически повторять совпадения, если в одной строке не будет нескольких совпадений.