Hi all,
I want to store some complex data. My first solution made use of Storable, which
worked just fine. Now I learned that neither Storable nor MLDBM are available on the
machine I want to use the program on (and they cannot be made available).
So I retreat to the core and use Data::Dumper to write a reference to my data to a
file ("..." indicates an omitted hash of arrays of hashes):
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my %monate = ...
open OUT, "> monate.dbm";
print OUT Dumper(\%monate);
close OUT;
Next I try to restore the data. My first attempt is this:
open IN, "monate.dbm";
my $temp = join '', <IN>;
my $reimport = eval $temp;
Unfortunately, $reimport has the same value as $temp:
$VAR1 = ...
Reading the Data::Dumper doc? Good idea. I found the $Data::Dumper::Terse variable,
which made Data::Dumper leave out the variable name $VAR1.
Great, it works. But, from the perldoc
>$Data::Dumper::Terse or $OBJ->Terse([NEWVAL]) When set,
>Data::Dumper will emit single, non-self-referential values as
>atoms/terms rather than statements. This means that the $VARn names
>will be avoided where possible, but be advised that such output may
>not always be parseable by "eval".
Hm. In my case, setting $Data::Dumper::Terse was absolutely necessary to make eval
work the way I wanted it to. Is there another way to get the original data structure
into a variable? In this context, I must admit that the different behaviour of eval's
two forms (eval EXPR and eval BLOCK) is a bit mysterious for me.
I am grateful for hints.
Thanks,
Jan
--
A common mistake that people make when trying to design something completely foolproof
is to underestimate the ingenuity of complete fools.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>