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