in reply to my $self is stumped!
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: my $self is stumped!
by dsheroh (Monsignor) on Jun 22, 2007 at 16:17 UTC |