編集:申し訳ありませんが、私が明白なことを述べている場合、私は質問を読み直しました。あなたが言う時
開くファイルは、gb18030でエンコードされたテキストファイルです。
プレーンテキストファイルのことですか?
もしそうなら、それはあなたの問題だと思います。dbmopen
インデックス付きデータベースファイル用で、dbmopen
perlプログラムの前回の実行で作成されたものが理想的です。プレーンテキストファイルの場合、ハッシュにバインドすることはできません。
私の以前の共鳴...
これは、Windows7x64で実行されているStrawberryperl5.12.1を使用するWindowsで機能します。どのWindowsPerlを使用していますか?インストールに少なくとも1つのDBMモジュールが含まれていることを確認してください。
役立つかもしれない他のいくつかのポイント:
$!
ダイステートメントに含める必要があります。これにより、オープンに失敗した場合のエラーメッセージが表示されます。うまくいけば、あなたの質問に答えてください。
dbmopen
%freq
ハッシュの内容をクリアするので、あなたは負けます$freq{total}
(その0はあなたが気付かないかもしれないので)。通常のパターンは次のとおりです。 dbmopen
、いくつかのハッシュ値を変更し、dbmclose
編集:
$!
失敗した「システム」コールのエラーテストを含む変数です。したがって、オープンラインは次のようになります。
dbmopen(%freq,$dictfile,0666) || die "Error: Cannot open dbmfile $dictfile: $!";
標準のDBMモジュールを確認するには、コマンドプロンプトから次のコマンドを実行します。
for %m in ( DB_File GDBM_File SDBM_File NDBM_File ODBM_File ) do @perl -M%m -e "print qq(%m: $%m::VERSION\n)"
私にとってそれは:
DB_File: 1.82
GDBM_File: 1.10
SDBM_File: 1.06
Can't locate NDBM_File.pm in @INC (@INC contains: C:/Nerd/StrawberryPerl/perl/site/lib C:/Nerd/StrawberryPerl/perl/vendor/lib C:/Nerd/StrawberryPerl/perl/lib .)
.
BEGIN failed--compilation aborted.
Can't locate ODBM_File.pm in @INC (@INC contains: C:/Nerd/StrawberryPerl/perl/site/lib C:/Nerd/StrawberryPerl/perl/vendor/lib C:/Nerd/StrawberryPerl/perl/lib .)
.
BEGIN failed--compilation aborted.
これは事実上、DB_File、GDBM_File、およびSDBM_Fileがあることを意味します。ただし、NDBM_FileまたはODBM_Fileではありません。dbmopen
申し訳ありませんが、デフォルトでどのモジュールが使用されているかを確認する方法がわかりません。
個人的には常にuse
特定のモジュールを使用し、tie
dbmopenの代わりに演算子を使用します。