#!/usr/bin/perl use Modern::Perl; ################################################################### package plugin::A; use Moose::Role; sub SAVE { print "SAVE von plugin::A($_[0]->{val})\n"; } 1; ################################################################### package plugin::B; use Moose::Role; sub LOAD { print "LOAD von plugin::B($_[0]->{val})\n"; } 1; ################################################################### package plugin::C; use Moose::Role; sub CONVERT { print "CONVERT von plugin::C($_[0]->{val})\n"; } 1; ################################################################### package klasse; use Moose; use Moose::Util qw( apply_all_roles ); has 'val' => (is => 'rw', isa => 'Str'); 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; apply_all_roles($self, $_) for @_; } 1; ################################################################### ################################################################### ################################################################### package main; my $klasse=klasse->new(val => 'TEST1'); $klasse->add_plugins('plugin::A','plugin::C'); $klasse->SAVE; $klasse->LOAD; $klasse->CONVERT; print "\n###########\n\n"; my $klasse2=klasse->new(val => 'TEST2'); $klasse2->add_plugins('plugin::B','plugin::C'); $klasse2->SAVE; $klasse2->LOAD; $klasse2->CONVERT;