Perlを使用してデータベースに読み書きするための非常に単純な構文を実装しようとしています。基本的に最終的な目標は、単純なPerlハッシュのようにデータベース内のフィールドにアクセスできるようにすることです。データベースへの読み書きのためのハッシュアクセスのオーバーロード
は、残念ながら、ちょうどデータベース名が十分であると仮定し、私がアクセスしようとしているデータベースの種類とそのAPIは独自のものので、私は実際にデータを読み書きする方法について多くの詳細に入ることはできません接続する情報。この作業を行うためにPerlで行う必要があるのはかなり汎用的なので、API情報は関係してはいけません。
私は、単純なデータベースオブジェクトを作成しています起動するには:
my $database = Database->new('NAME');
その後、私は私が読みたいフィールド名を指定してデータベースから読みたい:
# Read from the database
my $value = $database{'field_name'};
# Write to the database
$database{'field_name'} = $value;
データがハッシュから読み取られるたびに、データベースにクエリを実行して値を取得する関数を呼び出す必要があります。
データがハッシュに書き込まれるたびに、データをデータベースに書き込む関数を呼び出す必要があります。
これは私がこれまで持っているものです。
Database.pm
package Database;
use overload '%{}' => \&access_data;
sub new {
my $class = shift;
my $name = shift;
my $self = bless {
name => $name
}, $class;
return $self;
}
sub access_data {
my $self = shift;
my $field = shift;
my $data = shift;
if (defined $data) {
# Write data to the database using the database API
}
else {
# Read data from the database using the database API
}
# Not sure what to return to make this work
}
test.pl
use Database;
my $database = Database->new('TESTDB');
# Overloaded to read the actual value from the database
print $database{'field_name'};
私はドキュメントを検索されていますoverloading hash accessしかし、私はそれがどのように機能するかを正確に理解するのに苦労しています。
このようなオーバーロードを、私が望むように動作させるにはどうすればよいですか?
デザインでは、通常のSQLデータベースの構成方法は考慮されていません。単一のデータベースには複数の*表*があり、それぞれに複数の*列*と複数の*行*がある場合があります。テーブルを選択する方法や、指定された列の複数の行を返す方法は提供されていません。 – Borodin
これはSQLデータベースではありません。データベースから値を取得するために必要なすべての情報は、フィールド名とサブスクリプトです。私は物事を簡素化するためにこの質問のために添え字部分を残しました。最終目標は '$ val = $ db {'field_name'} [1]'のような構文を持つことです。ここで '1'は目的のレコードの添え字です。 – tjwrona1992