Object Reference

Joshua Keroes joshua_keroes at eli.net
Sat Jul 20 03:00:46 CDT 2002


You're making things too hard on yourself. Just require the file.

File: test.pl

  #!/usr/bin/perl -w
	
  use strict;

  our $VAR1;
  require "stored.pl";
  print $VAR1;

  exit;

File: stored.pl
$VAR1 = [
          [
            'a',
            'b',
            'c'
          ],
          {
            'foo' => 'bar',
            'baz' => 're',
            'qux' => 'quux'
          }
        ];

That's all there is to it. The nice thing about using require() is 
that you'll get an error if there are compilation problems in the
data file.

-Joshua

PS Data::Dumper will let you name those variables using slightly
different syntax. Say you had two variables named $foo and $bar.
This method takes two arrayrefs. The first one contains the variables
you wish to dump. The second one contains the names of the variables.

ex.

  print Data::Dumper->Dump([$foo, $bar], ['foo', 'bar'])

If you need to dump arrays or hashes, be sure to pass refs instead.

ex.

  print Data::Dumper->Dump([\%hash, \@array], ['hash', 'array']);


PPS There are plenty of serialization methods to choose from. Here
are some that I've used:

1. Storable (freeze() / thaw() & store() / retrieve())

2. YAML (Dump() / Load())

3. XML::Simple (XMLout() / XMLin())


__END__


On (Fri, Jul 19 18:29), Jason White wrote:
> I'm using Data::Dumper to save and restore objects.
> 
> Here is my RestoreFromFile function.
> 
> sub RestoreFromFile($){
>         my ($filename,$tmp,$VAR1);
>         $filename=shift;
>         $tmp="";
>         open(INFILE, "$filename");
>         while(<INFILE>){
>                 $tmp.=$_;
>         }
>         eval $tmp;
>         return $VAR1; # returns a reference to an object
> # Why does Data::Dumper format the dump so nicely?  
> # I'm going to have to strip out all the newlines before writing to make this more useful
> }
> 
> 
> my $tmp = RestoreFromFile("objectfile");
> 
> I now have a pointer to my object($tmp) but how do I typedef it or anothr variable to the right object type?
> $tmp->ObjectMethod() doesn't work, it thinks I'm trying to invoke a method of a scalar (the reference) not the object type.
> 
> Jason White
> 
> P.S.  There has to be a better serialization strategy, doesn't there?
> 
TIMTOWTDI



More information about the Pdx-pm-list mailing list