2

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 埃芬贝格

2 つのプラットフォーム間のトラブルシューティングでは、分割時に失敗することが示されています。または次の行ですが、それを修正するのに十分な Perl を知りません。コードを変更する必要がありますか、それとも特定のコマンドライン オプションで Perl を起動する必要がありますか?

ありがとう。

4

1 に答える 1

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);
}
于 2012-05-07T10:04:04.347 に答える