1

Storable::nfreeze を使用してデータベースにハッシュを挿入したいのですが、データが正しく挿入されません。

私のコードは次のとおりです。

%rec=();
$rec{'name'} = 'my name';
$rec{'address'} = 'my address';

my $order1 = new Order();
$order1->set_session(\%rec);
$self->createOrder($order1);

sub createOrder {
my $self  = $_[0];
my $order = $_[1];


# Retrieve the fields to insert into the database.
my $st = $dbh->prepare("insert into order (session,.......) values(?,........)");

my $session   = %{$order->get_session()};
$st->execute(&Storable::nfreeze(\%session),.....);
$st->finish();

}

sub getOrder
{
     ...

    my $session = &Storable::thaw( $ref->{'session'} );
    .....
}    

thaw正しく挿入されたいくつかの行でテストしたため、正常に動作していますが、サブルーチンを使用して挿入された行を取得しようとすると、createOrder次のエラーが表示されます。

blib/lib/Storable.pm (blib/lib/auto/Storable/thaw.al に自動分割) 415 行目 (v2.7) よりも新しい保存可能なバイナリ イメージ v36.65

エラーは、thaw. はnfreezeハッシュを適切に保存しませんでした。

createOrderサブルーチンで間違っていることを教えてもらえますか?

モジュールのバージョンが問題とは何の関係もないことはわかっています。

4

1 に答える 1

4

あなたの問題はおそらくここで不適切な逆参照です:

my $session   = %{$order->get_session()};
$st->execute(&Storable::nfreeze(\%session),.....);

これで修正されるはずです:

my $session   = $order->get_session();
$st->execute(&Storable::nfreeze($session),.....);

->get_sessionハッシュ参照を返すため、スカラー コンテキストで逆参照すると、ハッシュに関する統計を含む文字列に変換されました。ハッシュは、で実行していた場合にキャッチされる%session空のパッケージ変数です。%main::sessionuse strict; use warnings;

于 2010-04-16T14:45:14.710 に答える