我在MS Windows上使用Strawberry Perl 5.14.2。以下代码在Linux Perl 5.10.1上运行正常,但在MS Windows上运行失败。我需要更新它才能在两者上运行。
sub read_dict {
open F, "<:utf8", "$dictfile" || die "Dictonary file $dictfile not found";
while (<F>) {
chomp;
s/^ *//;
split;
$freq{$_[1]} = $_[0];
$header = substr($_[1],0,$wd);
if ($freq{"m,$header"}) {
if ($freq{"m,$header"} < length($_[1])) {
$freq{"m,$header"} = length($_[1]);
}
} else {
$freq{"m,$header"} = length($_[1]);
}
$freq{total} += $_[0];
}
close(F);
}
它在MS Windows上查找并解析$ dictfile,但无法累积$ freq {total},这会导致其他地方出现除零错误。 $ dictfile是一个加权字典,其数据如下所示:
8 永垂不朽
8 震耳欲聋
85 罗马里奥
891 澳大利亚
9 埃芬贝格
我在两个平台之间的故障排除表明它在拆分时失败了;或以下行,但我不知道足够的Perl来修复它。是否需要更改代码,还是应该使用特定的命令行选项启动Perl?
感谢。
答案 0 :(得分:1)
根据ArtM的建议,这是工作代码。
sub read_dict {
open F, "<:utf8", "$dictfile" || die "Dictonary file $dictfile not found";
while (<F>) {
chomp;
s/^ *//;
my @entry = split(/ /, $_);
$freq{$entry[1]} = $entry[0];
$header = substr($entry[1],0,$wd);
if ($freq{"m,$header"}) {
if ($freq{"m,$header"} < length($entry[1])) {
$freq{"m,$header"} = length($entry[1]);
}
} else {
$freq{"m,$header"} = length($entry[1]);
}
$freq{total} += $entry[0];
}
close(F);
}