我跑的时候:
perl -e '$x="abc\nxyz\n123"; $x =~ s/\n.*/... multiline.../; printf("str %s\n", $x);'
我希望结果是:
str abc... multiline...
而不是
str abc... multiline...
123
我哪里错了?
答案 0 :(得分:7)
$x =~ s/\n.*/... multiline.../s
/s
修饰符告诉Perl将匹配的字符串视为单行,这会导致.
匹配换行符。通常它没有,导致你观察到的行为。
答案 1 :(得分:2)
你需要在你的正则表达式上使用's'修饰符,这样点'''。将匹配任何后续换行。所以这个:
$x =~ s/\n.*/... multiline.../;
成为这个:
$x =~ s/\n.*/... multiline.../s;