مشكلة تخزين تجزئة في ديسيبل باستخدام قاطع :: nfreeze في بيرل
-
27-09-2019 - |
سؤال
أرغب في إدراج علامة تجزئة في DB باستخدام Stint :: 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
روتين فرعي ، أحصل على خطأ يقول:
صورة ثنائية صاخبة V36.65 أكثر حداثة من أنا (v2.7) في blib/lib/stint.pm (autosplit في blib/lib/auto/stint/thaw.al) خط 415
يأتي الخطأ من الخط الذي يحتوي thaw
. ال nfreeze
لم يخزن التجزئة بشكل صحيح.
هل يمكن لأي شخص أن يوجهني إلى ما أفعله خطأ في createOrder
روتين فرعي؟
أعرف أن إصدار الوحدة النمطية لا علاقة له بالمشكلة.
المحلول
من المحتمل أن تكون مشكلتك غير لائق هنا:
my $session = %{$order->get_session()};
$st->execute(&Storable::nfreeze(\%session),.....);
هذا يجب أن يصلحه:
my $session = $order->get_session();
$st->execute(&Storable::nfreeze($session),.....);
حيث ->get_session
إرجاع مرجع التجزئة ، عندما تخلطه في سياق العددية ، كان يتحول إلى سلسلة تحتوي على إحصائيات على التجزئة. التجزئة %session
هو متغير الحزمة الفارغة %main::session
الذي كنت قد اشتعلت إذا كنت تعمل مع use strict; use warnings;
.