2017-09-27 16 views
1

通常のPerlの代わりにSDBM_Fileハッシュを使用する必要がある場合はありますか? SDBM_Fileハッシュが通常のPerlハッシュを達成できないことは何ですか? 私はここでドキュメントhttps://perldoc.perl.org/SDBM_File.htmlhttp://docs.w3cub.com/perl~5.26/sdbm_file/を読んでいますが、なぜ私はSDBMファイルDBの代わりに何を達成するためにPerlのハッシュを使用できないのだろうと思っていますか?PerlのSDBM_Fileハッシュと通常のハッシュの違いは?

+0

'SDBM_File'はハッシュではありません。それは、ハッシュのような変数をインターフェースとして提供するキー値のディスク記憶モジュールです。 – ikegami

答えて

2

大きな違いは、SDBM_Fileハッシュ(およびPerlのDBMファイル実装のいずれか)は、ハッシュが外部ファイルに格納されていることです。

標準のPerlハッシュにデータを格納すると、そのハッシュはプログラムの実行中のみ存在します。プログラムが終了すると、あなたのハッシュは消え、ハッシュのデータは薄い空気に消えます。次回プログラムを実行すると、ハッシュは再び空になります。

DBMファイルのハッシュにデータを格納すると、その変更がファイルに書き込まれます。プログラムが終了すると、そのファイルはまだ存在します。したがって、プログラムを再度実行すると、データはファイルから再ロードされ、使用するためにまだそこに残ります。

ほとんどの場合、プログラムの実行中にのみ存在する一時的なハッシュが必要です。永続的なデータが必要な場合は、DBMハッシュが必要なものかもしれません(ただし、正直言って、最近ほとんどの人がデータベースを使用します)。

+0

ありがとうDaveさん、perlは自動的にSDBMが書き込んだ/読んでいる外部ファイルに.pagを自動的に付加しますか?perldocリンクの.dirと.pagに関することを本当に理解していませんでした。 – Vicky

+1

@Vicky:各ハッシュに対して拡張子 '.pag'を持つものはデータの「ページ」を含み、拡張子「.dir」を持つものは「ディレクトリ」(各データが格納される場所のインデックス)を含みます。そして、はい、Perlは 'tie'コマンドに与えたハッシュファイル名にこれらの拡張子を追加します。しかし、実際には、SQLiteやPostgreSQLのような高品質のオープンソースデータベースがあるので、DBMファイルを使う必要はほとんどありません。 –

+0

(@Vicky:Perlが自動的に追加する拡張機能を変更することはできますが、誰もこれを実行することはできません)。 –