2
MS WindowsでStrawberry Perl 5.14.2を使用しています。次のコードはLinux Perl 5.10.1ではうまく動作しますが、MS Windowsでは失敗します。私は両方を実行するように更新する必要があります。MS Windowsで動作するようにPerlスクリプトを更新するには
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を、蓄積することができません。 $のdictfileは次のようになり、データと加重辞書です:2つのプラットフォーム間の
8 永垂不朽
8 震耳欲聋
85 罗马里奥
891 澳大利亚
9 埃芬贝格
私のトラブルは、それが失敗のいずれかの分割でのショー。または次の行がありますが、私はそれを修正するのに十分なPerlを知らないのです。コードを変更する必要がありますか、またはPerlを特定のコマンドラインオプションで起動する必要がありますか?
ありがとうございました。
私の@varは=スプリット 'のように、明示的な' split'コールを使用してみてください。多分そこに隠された文書化されていない行動はあるが、 'split'('と 'の代わりに' @ _'の@のvar'を使用空の文脈では、分割されたアイテムを置くために@を使用しません) – ArtM
ありがとうございますArtM。私は警告を出し、暗黙の分割が専用であることを発見した。あなたが提案したものだけで、PerlのOSとバージョンの両方の魅力のように機能します。 – tahoar
["@への暗黙の分割の使用は推奨されていません]"(http://stackoverflow.com/questions/2436160/why-does-perl-complain-use-of-implicit-split-to-is-deprecated) – daxim