正如标题所说,perl在查询不存在的元素之后将虚拟元素添加到数组中.查询后数组大小增加.举例说明:
my $rarr;
$rarr->[0][0] = 'S';
$rarr->[0][1] = 'MD';
$rarr->[1][0] = 'S';
$rarr->[1][1] = 'PRP';
my $crulesref;
$crulesref->[0] = $rarr;
check_rule('aa', 0);
if($rarr->[3][0] == 'M'){ # just check a not existing element
print "m\n";
}
check_rule('bb', 0);
if($rarr->[5][0] == 'M'){ # again: just check a not existing element
print "m\n";
}
check_rule('cc', 0);
sub check_rule($$)
{
my ($strg,$ix) = @_;
my $aref = $crulesref->[$ix];
my $rule_size = @$aref;
{print "-----$strg aref:$aref rs:$rule_size aref:'@$aref'\n";
for(my $t1 = 0; $t1 <$rule_size; $t1++){ …Run Code Online (Sandbox Code Playgroud) 我无法读取UTF-8文件并检测到一些非ASCII字符,如'á'或'ö'.如果我只是用UTF-8字符声明一个常量字符串,一切正常,错误只发生在文件内容上.
我的输入文件如下:
áéíóúöü??ÁÉÍÓÚÖÜ??äÄß
Run Code Online (Sandbox Code Playgroud)
我的perl程序看起来:
use utf8;
binmode STDOUT, ":utf8";
my $szo = "áéíóúöü??ÁÉÍÓÚÖÜ??äÄß";
list($szo);
while(<STDIN>){
chomp;
list($_);
}
sub list($){
my ($szo) = @_;
my @arr = split(//, $szo);
foreach(@arr){
my $ord = ord($_);
if($_ eq 'á'){print "á\n";}
print "isoe elem:$_ ord:$ord \n";
}
}
Run Code Online (Sandbox Code Playgroud)
执行结果如下:
á
isoe elem:á ord:225
isoe elem:é ord:233
isoe elem:í ord:237
isoe elem:ó ord:243
....
isoe elem:ß ord:223
From here file data, no good:
isoe elem:Ã ord:195
isoe elem:¡ ord:161
isoe elem:Ã ord:195
isoe elem:© …Run Code Online (Sandbox Code Playgroud) perl ×2