in reply to Re: Re: Re: Re: Module to read a dumped file
in thread Module to read a dumped file

You are saying listify the hash first ala
print Dumper(%hash);
When you should be saying dump the hash as a reference
print Dumper(\%hash);
But as someone said, if you want to dump several top level vars and get them back in a list form
$dump= Data::Dumper->Dump([[\%hash,\@array,$scalar]],[qw(*vars)]); my @vars=eval $dump;
theres a few other tricks as well. You can parse out the var names from dumper then wrap them all in a do and return them as a list, yada yada.

A last point. You may want to dump in Pruity=1 mode.

$Data::Dumper::Purity=1; print Data::Dumper->new([\%foo],['*foo'])->Purity(1)->Dump;
Be aware that seriously sick and twisted data structures dont dump properly with Data::Dumper. For this reason unless hand modification is needed of the dumped data you should use Storable instead. Also, evaling these structres from a file is a serious security risk (hostile code can be embedded in the file and will execute with your permissions when you eval it). Another good reason to use Storable (which has an easy to use reader too.)

Anyway,

--- demerphq
my friends call me, usually because I'm late....

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: Re: Module to read a dumped file
by juo (Curate) on Feb 12, 2003 at 15:12 UTC

    Yes indeed after looking at storable it looks as a much more suitable solution as the files only have to be used in Perl. However when looking at the function of storage it will store a Hash table into a file but it restores it into a scalar. I have been unable to get it back into a hash table.

    my %stages; $stages{job_choice}->{status}->{val}=""; $stages{job_choice}->{param_gui}->{val}="job_choice_gui.pl"; $stages{input}->{status}->{val}=""; use Storable; store \%stages, 'stages.test'; my $hashref = retrieve('stages.test'); # not good : result is a scalar my %hashref1 = %{do retrieve('stages.test')}; # This does the job but +it reports an error message.

    I have found the solution. They should actually add this to the storable documentation.

    my %hashref = %{retrieve('stages.test')};