You could skip the method dispatch completely and call the sub as a sub. That is, in package person:
sub introduce { my($self)=$_[0]; print "Hello, I'm "; # $self->tellName(); tellName( $self ); }
With this change only, the new code produces:
Hello, I'm Alice. Hi, I'm Billy The Kid. Here's my mom: Hello, I'm Alice.
I don't recommend that in general, however. For the programmer who comes to your work later (probably you), this could be confusing.
Update: Another sort of lousy solution:
package child; sub tellName { my($self)=$_[0]; if ( caller eq __PACKAGE__ ) { print "$self->{'nickName'}.\n"; } else { $self->SUPER::tellName(); } }
I don't think this is a whole lot better except that it's a lot more obvious that you've done something tricky. I really like ysth's recommendation that the child have a reference to a separate parent object.
In reply to Re: my $self is stumped!
by kyle
in thread my $self is stumped!
by headybrew
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |