когда я бегу:
perl -e '$x="abc\nxyz\n123"; $x =~ s/\n.*/... multiline.../; printf("str %s\n", $x);'
Я ожидаю, что результат будет:
str abc... multiline...
вместо этого я получаю
str abc... multiline... 123
Куда я иду не так?
$x =~ s/\n.*/... multiline.../s
/s указывает Perl обрабатывать сопоставленную строку как однострочную, что приводит к совпадению . с новыми строками. Обычно это не так, что приводит к вашему наблюдаемому поведению.
/s
.
Вам нужно использовать модификатор 's' в своем регулярном выражении, чтобы точка '.' будет соответствовать любым последующим переводам строки. Итак, это:
$x =~ s/\n.*/... multiline.../;
Становится так:
$x =~ s/\n.*/... multiline.../s;