http://www.perlmonks.org?node_id=1054424


in reply to method aliases with goto(&NAME)

Won't somebody please think of the children?!?!.

package Parent { sub legacy_method { my ($self, @args) = @_; return $self->current_method(@args); } sub current_method { return 1; } } package Child { use base 'Parent'; sub current_method { return 2; } } Child->legacy_method; # returns 2

If you swap in your goto implementation of the legacy method, then calling Child->legacy_method returns 1.

Here's an alternative safer version using goto...

sub legacy_method { my $next = $_[0]->can('current_method'); goto $next; }

See also http://tvtropes.org/pmwiki/pmwiki.php/Main/ThinkOfTheChildren.

use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name