#!/usr/bin/perl use strict; use warnings; package plugin; our @ISA; sub SAVE { print "SAVE von plugin($_[0]->{val})\n"; } sub set_isa { my $self=shift; my $name=shift; @ISA=($name); } 1; package klasse; our @ISA; use Digest::MD5 qw(md5_hex); sub new { return bless {val=>$_[1]}, $_[0]; } sub SAVE { print "SAVE von klasse($_[0]->{val})\n"; } sub LOAD { print "LOAD von klasse($_[0]->{val})\n"; } sub use_plugin { my $self=shift; my $name=shift; my $obj_unique='plugins::'.md5_hex($self); return eval(' no strict; @'.$obj_unique.'::ISA=('.$name.','.__PACKAGE__.'); bless($self,'.$obj_unique.'); '); } 1; my $obj1=klasse->new('TEST1'); $obj1->SAVE; # <= das SAVE aus klasse $obj1->LOAD; # <= das LOAD aus klasse print "\n"; $obj1=$obj1->use_plugin('plugin'); $obj1->SAVE; # <= das SAVE aus plugin $obj1->LOAD; # <= das LOAD aus klasse print "\n###########\n\n"; my $obj2=klasse->new('TEST2'); $obj2->SAVE; # <= das SAVE aus klasse $obj2->LOAD; # <= das LOAD aus klasse print "\n"; $obj2=$obj2->use_plugin('plugin'); $obj2->SAVE; # <= das SAVE aus plugin $obj2->LOAD; # <= das LOAD aus klasse