関係データベースのような本格的なデータベースのかわりに 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;
