我无法复制您的问题。
$ perl -wle'
$all = "foo\n A, x\nmeow";
$all =~ s/^ *[A-Z], [a-z]\n//mg;
print $all;
'
foo
meow
$ perl -wle'
$all = "foo\n A, x\nmeow";
$all =~ s/^ *\p{Lu}, \p{Ll}\n//mg;
print $all;
'
foo
meow
在 Linux 上使用 5.8.8、5.10.1、5.12.4(线程)和 5.16.0 进行了测试。
最佳猜测:pos($all)
不为零。也许你做了一些愚蠢的事情if ($all =~ /.../g)
。
我一开始也无法复制空格。
$ perl -wle'
$all = "foo\nA, x\nmeow";
$all =~ s/^ *[A-Z], [a-z]\n//mg;
print $all;
'
foo
meow
$ perl -wle'
$all = "foo\n A, x\nmeow";
$all =~ s/^ *\p{Lu}, \p{Ll}\n//mg;
print $all;
'
foo
meow
在 cygwin 上使用 5.10.1(线程)测试。
>perl -wle"$all = qq{foo\nA, x\nmeow}; $all =~ s/^ *[A-Z], [a-z]\n//mg; print $all;"
foo
meow
>perl -wle"$all = qq{foo\nA, x\nmeow}; $all =~ s/^ *\p{Lu}, \p{Ll}\n//mg; print $all;"
foo
meow
在 Windows (ActivePerl) 上使用 5.14.0(线程)和 5.14.2(线程)测试。
但是,啊哈!!!!
>perl -wle"$all = qq{foo\nA, x\nmeow}; $all =~ s/^ *[A-Z], [a-z]\n//mg; print $all;"
foo
meow
>perl -wle"$all = qq{foo\nA, x\nmeow}; $all =~ s/^ *\p{Lu}, \p{Ll}\n//mg; print $all;"
foo
A, x
meow
在 Windows (ActivePerl) 上使用 5.10.1(线程)、5.12.1(线程)和 5.12.4(线程)进行了测试。
旧版本的 Perl 似乎有一个错误。它似乎已在 5.14 中修复。该错误似乎在优化器中(如 所示-Mre=debug
),因此可以通过“禁用”优化器来绕过它。
>perl -wle"$all = qq{foo\nA, x\nmeow}; $all =~ s/^ *\p{Lu}, \p{Ll}\n//mg; print $all;"
foo
A, x
meow
>perl -wle"$all = qq{foo\nA, x\nmeow}; $all =~ s/^ *\p{Lu}{1}, \p{Ll}\n//mg; print $all;"
foo
meow