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

###########################################################
  package Fortune;              # Persistente Klasse
###########################################################

use Persistent;                 
@ISA = qw(Persistent);          # Vererbung

###########################################################
sub new {                       # Konstruktor
###########################################################
    my $class = shift;
    my $self = {};
    bless($self, $class);

    $self->{'aphorisms'} = [];  # Referenz auf leere
                                # Fortune-Liste
    return $self;
}

###########################################################
sub getany {                    # Fortune holen
###########################################################
    my $self = shift;
                                # Zufälliger Listenindex
    my $index = rand() * ($#{$self->{'aphorisms'}} + 1);
				# Element extrahieren
    splice(@{$self->{'aphorisms'}}, $index, 1);
} 

###########################################################
sub add {                       # Fortune hinzufügen
###########################################################
    my $self = shift;
                                # Liste an Liste anhängen
    push(@{$self->{'aphorisms'}}, @_);
} 


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

srand(time);                    # Zufallsgenerator initia-
                                # lisieren (ab perl 5.004 
                                # nicht mehr nötig)
my $datafile = "fortune.data";  # File für 
                                # persistente Daten
my $text;

my $fortune = Fortune->new();   # Persistentes Objekt 
				# anlegen

if(! $fortune->load($datafile) ||    # Daten aus File laden
   ! ($text = $fortune->getany())) { # Fortunes aufgebraucht?

    $fortune->add(              # Neu-Initialisierung
      "Geteiltes Unrecht ist halbes Recht",
      "Wenn Du zum Weibe gehst, vergiß die Peitsche nicht",
      "Lang lebe Fortran!",
      "Echte Programmierer haben keine Angst vor GOTOs");

    $text = $fortune->getany(); # Fortune holen
}

print "$text\n";                # Fortune ausgeben

$fortune->store("$datafile");   # Modifiziertes Objekt
				# zurückspeichern
