У нас есть действительно старый Perl-код, последний раз обновленный в 1997 году. Я пытаюсь перейти на более новую версию Perl, где $*
устарела.
Я пытаюсь научиться переписывать это, ноединственная помощь, которую вы получите из документации по perlvar: «Вместо этого вы должны использовать модификаторы регулярных выражений / s и / m».
my ($file, $regexp, $flags) = @_;
my (@found_lines, @tmp_list, $comp_buf);
local ($*);
if ($flags =~ tr/c//d)
{
$* = 1;
(substr ($regexp, 0, 1) ne "^") && ($regexp = "^.*$regexp");
($regexp !~ /([^\\]|^)(\\\\)*\$$/) && ($regexp .= ".*\$");
&read_comp ($file, \$comp_buf);
@found_lines = grep ($_ .= "\n", ($comp_buf =~ /$regexp/g));
}
else
{
@tmp_list = &read_list ($file, 0);
@found_lines = grep (/$regexp/, @tmp_list);
}
if ($flags eq "q")
{
$#found_lines >= 0;
}
elsif ($flags eq "a")
{
$#found_lines+1;
}
else
{
@found_lines;
}
Для меня действительно трудно понять, как заменить $*
здесь, насколько я понимаю из комментариев, которые мы используем $*
здесь, чтобы включить многострочное сопоставление для следующего поиска регулярных выражений. Поэтому я предполагаю, что мне нужно как-то добавить эти флаги в выражения регулярного выражения.
Как мне переписать этот код, чтобы заменить существующие $*
экземпляры?