in reply to Extending objects

I think you should keep existing definitions of Foo and Bar. There's no reason to change them. I might implement a FooBar class like this though:

package FooBar; our @ISA = qw/Foo Bar/; sub new { my ($class, %args) = @_; bless { map %$_, $class->Foo::new(%args), $class->Bar::new(%args), }, $class; }
and use it like this:
package main; my $a = FooBar->new(name => 'Zoid', age => 55); printf "name: %s, age: %s\n", $a->name, $a->age;

As long as there are no naming conflicts, this should be good. If there are naming conflicts you might choose to override the access method.

Also I don't like your directory structure. I usually go down the inheritance hierarchy which only works for single inheritance. Truck/FireTruck.pm. If FireTruck is both a Truck and a Fire, I wouldn't name it FireTruck/Fire.pm and FireTruck/Truck.pm. You may find that you can think of one base class its true base and the other is like a role. But better yet put them all at the same directory level.