I was thinking about it today, and it occurred to me that we could make it very easy to install new methods into the builtin types (SCALAR, ARRAY, HASH, CODE). What if we simply had a package for each of these builtin types such that you could say something like: sub ARRAY::merge(ARRAY $lhs, ARRAY $rhs) { my @result; my $ubound=($lhs.length < $rhs.length ? $rhs.length : $lhs.length) - 1; #here i'm calling ARRAY::length, not SCALAR::length for(0..$ubound) { push @result, $lhs[$_ % $lhs.length]; push @result, $rhs[$_ % $rhs.length]; } return @result; } and expect that to be callable like C<@a1.merge(@a2)>? Here's another possibility along the same lines: package SparseArray; #yes, I know package is going away... @ISA=('ARRAY'); #without this, the stash assignment later would be illegal #do other stuff here... and then later be able to say something like C<%main::{'@sparsearray'}=new SparseArray> and expect *that* to work right? This could be a more general tying mechanism. It could also probably be integrated into vtables, although I don't really know enough about how they work to say that for sure. (Obviously, this is more of a Perl-level interface idea than an internals idea. I suppose that's why I'm sending it to -language. :^) ) BTW, one other random thought I came up with while I was writing this: Could inheritance be a property? class My::Class is a('Other::Class'); #My::Class::ISA=('Other::Class') --Brent Dax [EMAIL PROTECTED]