Regex 为什么这个带有2字节unicode字符的正则表达式会发出;“未初始化”;匹配时的左值警告?
以下代码:Regex 为什么这个带有2字节unicode字符的正则表达式会发出;“未初始化”;匹配时的左值警告?,regex,perl,unicode,Regex,Perl,Unicode,以下代码: #!/usr/bin/env perl use utf8; use strict; use warnings; use 5.012; # implicitly turn on feature unicode_strings my $test = "some string"; $test =~ m/.+\x{2013}/x; 收益率: 在test.pl第9行的模式匹配(m/)中使用未初始化值$test 这似乎发生在\x{}中的任何2字节字符上。以下正则表达式工作正常: /a+\x{2
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use 5.012; # implicitly turn on feature unicode_strings
my $test = "some string";
$test =~ m/.+\x{2013}/x;
收益率:
在test.pl第9行的模式匹配(m/)
中使用未初始化值$test
这似乎发生在\x{}
中的任何2字节字符上。以下正则表达式工作正常:
/a+\x{2013}/
/.*\x{2013}/
/.+\x{20}/
此外,错误会随着
use bytes
而消失,但使用该pragma是错误的。这是怎么回事?你问这个问题很奇怪。我看起来和我昨天刚刚报告的一个bug有关
其中,此代码还会在拆分中产生“使用未初始化值$”警告。
并导致拆分
意外返回空列表:
use warnings;
binmode *STDOUT, ":encoding(UTF-8)";
my $pattern = "\x{abc}\x{def}ghi";
for ( "\x{444}", "norm\x{a0}l", "\x{445}", "ab\x{ccc}de\x{fff}gh" ) {
print "--------------------\ntext is $_, pattern is /$pattern/\n";
# expect split to return ($_) , but when $pattern and $_ both
# have wide chars, it returns ()
print 'split output is [', split /$pattern/, $_;
print "]\n";
}
这是一个bug,现在已通过提交7e0d5ad7c9cdb21b681e611b888acd41d34c4d05和
c72077c4fff72b66cdde1621c62fb4fd383ce093。此修复程序应在5.17.5中提供,并在perl 5.16.1中确认。我认为您应该将其作为perl bug报告发布,而不是一个SO问题;我们所能做的就是从哲学的角度来看待它:)我隐约希望这是我的错误,但你是对的——看起来这可能只是一个bug。顺便说一句,我正在测试v5.14.2。解决方法:添加
utf8::升级($test)代码>在匹配之前。仍然存在于fresh 5.17.4中。这可能是一个注释好的,看起来这是一个bug,我将在rt.perl.org中加入,谢谢@Arkady Kukarkin-昨天提交:#114808