bri*_*foy 13 regex unicode perl
这在Perl 5.22.1中得到修复.我在Perl v5.22中写到它添加了花哨的Unicode字边界.
Perl v5.22添加了TR#29的Unicode断言.我一直在玩句子边界断言,但它似乎只能找到文本的开头和结尾:
use v5.22;
$_ = "See Spot. (Spot is a dog.) See Spot run. Run Spot, run!\x{2029}New paragraph.";
while( m/\b{sb}/g ) {
say "Sentence boundary at ", pos;
}
Run Code Online (Sandbox Code Playgroud)
输出在文本的开头和结尾处注明句子边界,但不是在完全停止之后,句子终结符或者parens:
Sentence boundary at 0
Sentence boundary at 70
Run Code Online (Sandbox Code Playgroud)
在Unicode的破坏测试仪显示他们大多是我希望他们基于TR#29.
我在这个功能的perl源代码中找不到任何非平凡的测试.我正在消化技术报告以创建适当的测试用例,但到目前为止,这看起来像另一个未经测试和破坏的功能.
Calle Dybedahl 的评论是正确的(当他们将其变成答案时,我会接受)。这是 v5.22.0 中的一个损坏的功能,据我所知,未经测试。昨晚我在编译最新的 perls 时遇到了问题,并以这个问题结束了这一天。
perl5.22.1 perldelta没有提及特定的更改(并且“提及”可能过于强烈,因为它只是暗示可能出现错误的事情而没有枚举它们)。它提到与 5.20.0 不兼容的更改(剪切和粘贴错误?),一个“单一”异常,然后是多个问题。提到“理智”让我认为所有的变化都与下一小节中的恐慌问题有关。仅在 rt.perl.org 的一个参考文献中提到“几个错误”让我认为这些错误与恐慌问题有关。
=head1 不兼容的更改
除了以下单个异常之外,没有故意与 5.20.0 不兼容的更改,我们认为这是为了获得新的 C<\b{wb}> 和(特别是)C<\b 而进行的明智更改{sb}> 在人们因为 Perl 5.22.0 实现中的错误而认为它们毫无价值并在将来避免它们之前,功能是理智的。如果存在任何其他错误,则它们是错误,我们要求您提交报告。参见下面的L。
=head2 边界检查结构
边界检查结构(Perl 5.22 中引入)修复了包括分段错误在内的多个错误 C<\b{gcb}>、C<\b{sb}>、C<\b{wb}>、C <\B{gcb}>、C<\B{sb}> 和 C<\B{wb}>。所有 C<\B{}> 现在都匹配空字符串;C<\b{}> 都没有这样做。L<[perl #126319]| https://rt.perl.org/Ticket/Display.html?id=126319 >
此外,记录新边界的perlrebackslash没有提到它们在 v5.22.0 中不起作用。
由于perldelta中的不一致以及我之前的经验,新功能在 perl 源代码中没有经过充分(甚至根本)测试,因此我忽略了可能的修复。我过早地切断了调查路线,这样可以节省自己几个小时。没有让代码在最新的二进制文件上运行当然是我的错,但我已经开始执着于我做错了什么并且我的代码是问题所在的想法。尽管我过去有很多相反的经历,但我并没有想到(除了对 UCD 的更新)perl是错误的。
现在我在另一台机器上并且有一个工作的 perl-5.22.1,我看到我的程序在单点版本中按预期工作。perldelta在这里可能会好得多。
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |