sub AUTOLOAD { my $Self = $_[0]; my $CalledAs = $AUTOLOAD; $CalledAs =~ s/^.*:://; return if $CalledAs =~ /DESTROY/; $code = qq { sub $CalledAs { my \$Self = \$_[0]; \@_ > 1 ? \$Self->{\$CalledAs} = \$_[1]: \$Self->{\$CalledAs} ; } }; eval $code; if($@){ die "Error defining sub routine, $CalledAs,$code, $@\n"; } goto &{$AUTOLOAD}; }