TASdvlper has asked for the wisdom of the Perl Monks concerning the following question:

Hi all,

I'm storing a hash table, as a scalar, in a single database record. I converted the hash to a scalar using Data::Dumper.

I'm trying to retrieve that record and convert it back to a hash, but am having problems.

if (defined $ref) { print "REF: $ref <br> \n"; $HASH = eval ($ref); %data = %$HASH; } else { %data = {}; } print "MYHASH: $_ $data{$_} <br> \n" for (sort keys %data); +exit;
Here is the output:
REF: $VAR1 = { 'KeyWordMapper:Modify' => 'notify', 'DispatchHistory:Re +store' => 'notify', 'BuildReport:CSETicketSummary' => 'notify', 'Agen +da:StatusRestore' => 'notify', 'BuildReport:SQATestDetails' => 'notif +y', 'Agenda:Create' => 'notify' };
%data seems to be empty and I don't know why. Any thoughts ???

Replies are listed 'Best First'.
Re: Having problems using eval()
by halley (Prior) on May 20, 2004 at 16:20 UTC
    1. After an eval, check $@ for any problems evaluating the string.

    2. To empty a hash, %data = (), not {}.

    --
    [ e d @ h a l l e y . c c ]

      @$ did the trick. Thanks.
Re: Having problems using eval()
by Belgarion (Chaplain) on May 20, 2004 at 16:22 UTC

    Rather than reinventing the wheel, I would recommend you investigate the FreezeThaw module. It does exactly what you require.

      Using Data::Dumper for data storage is hardly reinventing the wheel. Its very usefull when you want to be able to actualy see the data and manipulate it by hand.

      ___________
      Eric Hodges

        You are absolutely correct, except the OP stated that they used Data::Dumper to convert their hash into a scalar to store it in a database record, and then wanted to turn the scalar back into the hash. It does not appear that the OP wanted to see or manipulate the data beyond converting to and from a database back-end. For this purpose, using FreezeThaw would be a better choice rather than hand rolling your own solution.

        Thank you for your comment though! More points of view are always helpful.