这是在 Perl 5.22.1 中修复的。我写在Perl v5.22 添加了奇特的 Unicode 字边界 http://www.effectiveperlprogramming.com/2016/06/perl-v5-22-adds-fancy-unicode-word-boundaries/.
Perl v5.22 添加了 Unicode 断言TR #29 http://unicode.org/reports/tr29/#SB3。我一直在玩句子边界断言,但它似乎只能找到文本的开头和结尾:
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;
}
输出在文本的开头和结尾处标注句子边界,但不在句号、句子终止符或括号之后标注:
Sentence boundary at 0
Sentence boundary at 70
The Unicode 中断测试器 http://unicode.org/cldr/utility/breaks.jsp主要显示它们是我期望它们基于TR #29 http://unicode.org/reports/tr29/#SB3.
我在 perl 源代码中找不到此功能的任何重要测试。我正在消化技术报告以创建适当的测试用例,但到目前为止,这看起来像是另一个未经测试和损坏的功能。
Calle Dybedahl 的评论是正确的(当他们将其变成答案时,我会接受)。这是 v5.22.0 中的一个损坏的功能,据我所知,未经测试。昨晚我在编译最新的 perls 时遇到了问题,并以这个问题结束了这一天。
perl5.22.1珀尔德尔塔没有提及特定的更改(并且“提及”可能过于强烈,因为它只是暗示可能存在错误的事情而没有枚举它们)。它提到与 5.20.0 不兼容的更改(剪切和粘贴错误?),一个“单一”异常,然后是多个问题。提到“理智”让我认为所有的变化都与下一小节中的恐慌问题有关。仅在 rt.perl.org 的一个参考文献中提到“几个错误”让我认为这些错误与恐慌问题有关。
=head1 不兼容的更改
除了以下内容之外,没有任何故意与 5.20.0 不兼容的更改
以下是一个例外,我们认为这是一个明智的改变
为了让新的 C 和(特别是) C 功能保持正常
在人们因为 Perl 5.22.0 中的错误而认为它们毫无价值之前
实施并在将来避免它们。
如果存在任何其他错误,则它们是错误,我们要求您提交报告。
参见下面的L。
=head2 边界检查结构
多个错误,包括分段错误,已通过边界修复
检查结构(在 Perl 5.22 中引入) C, C, C,
C、C 和 C。所有 C 现在都匹配空
细绳; C 都没有这样做。
Lhttps://rt.perl.org/Ticket/Display.html?id=126319>
此外,Perl 反斜杠记录了新边界,但没有提到它们在 v5.22.0 中不起作用。
由于不协调,我忽略了可能的修复珀尔德尔塔根据我之前的经验,新功能在 Perl 源代码中没有得到充分(甚至根本没有)测试。我过早地切断了调查线索,这样我就可以节省几个小时。没有让代码在最新的二进制文件上运行当然是我的错,但我已经开始执着于我做错了什么并且我的代码是问题所在的想法。尽管我过去有很多相反的经历,但我并没有想到(除了 UCD 的更新)perl错了。
现在我在另一台机器上并且有一个工作的 perl-5.22.1,我看到我的程序在单点版本中按预期工作。这珀尔德尔塔这里本来可以更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)