関係データベースのような本格的なデータベースのかわりに Perl の tie() をつかうと,簡易データベースを容易にあつかうことができる. つまり,tie() をつかうことによって Perl のハッシュを外部ファイルとむすびつけて,恒久的 (permanent) なものにすることができる. ただし,本格的なデータベースとはちがって並列にかきこんだりすることはできないし,性能もひくいとかんがえられる. したがって,プロトタイプには適するが実用には適さない.
一方,かんたんなデータベースのようなデータ群あるいはデータベースに登録するべきデータ群をつくるとき,Excel がよくつかわれる. そこで,Excel などでつくったデータを,たとえばタブくぎりのテキストとして出力して,それを Perl のデータベースにとりこみたくなる. そういうプログラムの例をしめす.
以下のプログラムでは,タブなどの空白文字でくぎられた 4 つのフィールドからなるレコードのならびを入力して,それを簡易データベースに登録する. このデータベースにおいては 4 つのフィールドのうちの最初のものをキーとして,あとの 3 つのフィールドを検索することができる. キーは一意でなければならない (一意性はここでは検査していない).
############################################################################ # # Text to DBM converter # ############################################################################ use strict 'subs'; use strict 'refs'; use SDBM_File; use Fcntl; my $FileName = "C:\DB_File"; sub error($) { my ($message) = @_; print STDERR "Error: $message\n"; } my %db; tie(%db, 'SDBM_File', $FileName, O_RDWR | O_CREAT, 0666) || error("Can't open database file!"); %db = (); $| = 1; print "Input file name: "; my $file = <>; chomp $file; open(INPUT, $file); while (<INPUT>) { if (/^(\w+)\s+(\w+)\s+(\w+)\s+(\w+)/) { my $A = $1; my $B = $2; my $C = $3; my $D = $4; print "A=${A} B=${B} C=${C} D=${D}\n"; $db{A} = "${B}\t${C}\t${D}"; } else { error("Syntax error: $_"); }; }; untie(%db); 1;