sub parameters { return bless [ $_[0], $_[0]->{'params'} ], DummyNameSpace if want('OBJECT'); # Single Param. return %{$_[0]->{'params'}; # This will create a } package DummyNameSpace; our $AUTOLOAD; sub isa { $_[0]->[1]->{'isa'} = $_[1] if defined $_[1]; return $_[0]->[1]->{'isa'}; } sub VERSION { $_[0]->[1]->{'VERSION'} = $_[1] if defined $_[1]; return $_[0]->[1]->{'VERSION'}; } sub can { $_[0]->[1]->{'can'} = $_[1] if defined $_[1]; return $_[0]->[1]->{'can'}; } sub AUTOLOAD { ref(my $o = shift) or die; # don't mess with garbage collection my $o1 = $o->[1]; ( my $method = $AUTOLOAD ) =~ s{.*::}{}; if ( !$method ) { # AUTOLOAD AS PARAM. $o1->{'AUTOLOAD'} = $_[0] if defined $_[0]; return $o1->{'AUTOLOAD'} } if ( $method =~ /^DESTROY$/ ) { return if !defined wantarray; $o1->{'DESTROY'} = $_[0] if defined $_[0]; return $o1->{'DESTROY'}; } $o1->{$method} = $_[0] if defined $_[0] and return $o1->{$method}; undef $AUTOLOAD; } 1;