package Foo;
sub new {
my ($class) = @_;
return bless [], $class;
}
sub val {
my $self = shift;
$self->[0] = $_[0] if @_;
"Foo($self->[0])";
}
package Bar;
sub new {
my ($class) = @_;
return bless { val => 'nothing' }, $class;
}
sub val {
my $self = shift;
$self->{val} = $_[0] if @_;
"Bar($self->{val})";
}
####
# Something to mixin
package Printer;
sub print {
my $self = shift;
my $val = $self->val;
print "Value is $val\n";
}
####
package Foo2;
use vars '@ISA';
@ISA = qw(Foo Printer);
package Bar2;
use vars '@ISA';
@ISA = qw(Bar Printer);
####
package main;
my $x = new Foo2;
my $y = new Bar2;
$x->val(17);
$y->val('xyzzy');
$x->print;
$y->print;