#!/usr/bin/perl use strict; use warnings; ################################################################### package plugin::A; sub SAVE { print "SAVE von plugin::A($_[0]->{val})\n"; } 1; ################################################################### package plugin::B; sub LOAD { print "LOAD von plugin::B($_[0]->{val})\n"; } 1; ################################################################### package plugin::C; sub CONVERT { print "CONVERT von plugin::C($_[0]->{val})\n"; } 1; ################################################################### package klasse; use Digest::MD5 qw(md5_hex); my %used; sub new { my $class=shift; my $val=shift; my $self={ val => $val }; my $obj_unique=$class.'::INSIDE'; $obj_unique.=chr(int(rand(26)+65)) while($used{$obj_unique}); $used{$obj_unique}++; $self=eval(' no strict; @'.$obj_unique.'::ISA=('.$class.'); $self->{ISA}=\@'.$obj_unique.'::ISA; return bless($self,'.$obj_unique.'); '); return $self; } sub SAVE { print "SAVE von klasse($_[0]->{val})\n"; } sub LOAD { print "LOAD von klasse($_[0]->{val})\n"; } sub CONVERT { print "CONVERT von klasse($_[0]->{val})\n"; } sub add_plugins { my $self=shift; for(@_) { unshift(@{$self->{ISA}},$_) if($_); } } 1; ################################################################### ################################################################### ################################################################### package main; my $klasse=klasse->new('TEST1'); $klasse->add_plugins('plugin::A','plugin::C'); $klasse->SAVE; $klasse->LOAD; $klasse->CONVERT; print "\n###########\n\n"; my $klasse2=klasse->new('TEST2'); $klasse2->add_plugins('plugin::B','plugin::C'); $klasse2->SAVE; $klasse2->LOAD; $klasse2->CONVERT;