#!/usr/bin/perl 
######################################################################
# (c) Michael Schilli 1999
######################################################################

##############################################################
  package PersTest;          # Beispielklasse, die persistente
                             # Eigenschaften erbt.
##############################################################
use Persistent;

@ISA = qw ( Persistent );    # Erbt von "Persistent.pm"

sub new {                    # Konstruktor
    my $type = shift;
    my $self = {};
    bless $self, $type;
}

sub initdata {               # Daten initialisieren
    my $self = shift;

    $self->{'the_hash'}   = \%the_hash;
    $self->{'the_array'}  = \@the_array;
    $self->{'the_scalar'} = 
      "Dieser Skalar enthält einen sehr " .
      "langen Wert mit einigen Sonderzeichen: " .
      " @,\$,\\,\",'.";
    $the_hash{'hash_key'} = 'hash_value';
    $the_array[1]         = 'array_value';


                             # Neues Objekt als Teil des 
                             # persistenten Objekts erzeugen
    my $objref = PersTest->new();
    $objref->{'myobjvar'} = 'myobjvarval';
    $self->{'the_object'} = $objref;
}

##############################################################
  package main;              # Hauptprogramm
##############################################################

                             # Persistentes Objekt
$obj1 = PersTest->new();     # erzeugen
$obj1->initdata();           # initialisieren 
$obj1->store("myobj.sav") || # speichern
    print "Cannot save\n";

$obj2 = PersTest->new();     # Neues persistentes 
                             # Objekt erzeugen
$obj2->load("myobj.sav") ||  # ... und mit den gespeicherten
    print "Cannot load\n";   # Daten von obj1 initialisieren

                             # Objektdaten ausgeben
print 
  "\$obj2->{'the_object'}->{'myobjvar'} = ",
  "$obj2->{'the_object'}->{'myobjvar'}\n";
print 
  "\$obj2->{'the_array'}->[1]           = ",
  "$obj2->{'the_array'}->[1]\n";
print 
  "\$obj2->{'the_hash'}->{'hash_key'}   = ",
  "$obj2->{'the_hash'}->{'hash_key'}\n";
print 
  "\$obj2->{'the_scalar'}               = ",
  "$obj2->{'the_scalar'}\n";
