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

###########################################################
package Basepac1;                 # Erste Basisklasse

sub new {                         # Konstruktor
  my $type = shift; 
  my $self = {};
                                  # Basisklassen1-Variable
  $self->{'b1'} = "b1";           # initialisieren
                                      
  bless $self, $type;
}

###########################################################
package Basepac2;                 # Zweite Basisklasse

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


  $self->{'b2'} = "b2";           # Basisklassen2-Variable
                                  # initialisieren
  bless $self, $type;
}

###########################################################
package Deripac;                  # Abgeleitete Klasse

@ISA = qw ( Basepac1 Basepac2 );  # Multiple Vererbung

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

  my ($pac, $key);     

  foreach $pac (@ISA) {           # Für alle Basisklassen
    my $hashref = $pac->new();    # Konstruktor aufrufen
                           
    foreach $key (keys %$hashref) {       # Geerbte Variablen
        $self->{$key} = $hashref->{$key}; # in den lokalen
    }                                     # Namensraum
  }                                       # hineinmischen
 
  bless $self, $type;
}

sub derimethod {                  # Variablen ausgeben
  my $self = shift;

  my $key;

  foreach $key (keys %{$self}) { 
      print "\$self->{'$key'}=", "$self->{$key}\n";
  }
}

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

$derobj = Deripac->new();         # Konstruktor aufrufen
$derobj->derimethod();            # Geerbte Variablen 
                                  # ausgeben
