in reply to Is it legal to create subs in a module?

Subs are declared as part of the packge, not part of an object.

If your Object->new() method dynamically creates a sub called foo, then you're in effect declaring Object::foo. This sub is now bound to the package, and therefore will stick around until the end of the execution

There are several approaches:

## autoload sub AUTOLOAD { my $self = shift; ( my $subname = $AUTOLOAD ) =~ s/.*:://; if( $obj->{ $subname } ) { ## this is over simplified, so you may need to do ## other checks... return $self->{ subname }; } else { croak "No such sub"; } }

If you just want to get/set attributes, I recommend the AUTOLOAD way rather than dynamically declaring subs. There would be no residual subs floating around that way