【发布时间】:2016-09-19 05:34:25
【问题描述】:
考虑文件y.txt(以UTF-8 编码)中的以下输入数据。
bar
föbar
还有一个文件y.pl,它将两个输入行放入一个数组并处理它们,寻找子字符串的起始位置。
use open qw(:std :utf8);
my @array;
while (<>) {
push @array, $_;
print $-[0] . "\n" if /bar/;
}
# $array[0] = "bar", $array[1] = "föbar"
print $-[0] . "\n" if $array[1] =~ /$array[0]/u;
如果我打电话给perl y.pl < y.txt,我会得到
0
2
3
作为输出。但是,我希望最后一个数字也是 2,但由于某种原因,第二个 /.../ 正则表达式的行为不同。我错过了什么?我想这是一个编码问题,但无论我尝试了什么,我都没有成功。这是 Perl 5.18.2。
【问题讨论】:
-
在 Cygwin 下的 Perl 5.22.2 上它适用于我。
-
在 x86_64-linux (CentOS 6) 上的 Perl 5.20.1 上工作
-
在 v5.22.1 [Ubuntu 16.04.1 LTS] 下工作正常
-
感谢测试。所以这似乎是 5.18.2 中的一个错误......糟糕......任何想法如何优雅地规避这个问题?