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
In reply to Re: Is it legal to create subs in a module?
by lestrrat
in thread Is it legal to create subs in a module?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |