sub mix { my ( $object, @classes ) = @_; push @classes, ref $object; my $package_name = join ( '_', @classes ); my $package_list = join ( ' ', @classes ); my $check = "package $package_name; \$declared"; unless ( eval $check ) { print " -- creating new package $package_name -- \n"; my $declaration = "package $package_name; use base qw($package_list); use vars '\$declared'; \$declared++"; eval $declaration; die "declaration error: $@\n" if $@; }; bless $object, $package_name; }