LanX has asked for the wisdom of the Perl Monks concerning the following question:
continuing this discussion in German.
please look at this suggestion of "Programming Perl, 3rd Edition, Chapter 12.5" how to realize a private method:
# An intriguing aspect of this behavior is that it can be # used to implement private method calls. If you put your # class in a module, you can make use of the file's lexical # scope for privacy. First, store an anonymous subroutine # in a file-scoped lexical: # declare private method my $secret_door = sub { my $self = shift; ... }; # Later on in the file, you can use that variable as though # it held a method name. The closure will be called directly, # without regard to inheritance. As with any other method, # the invocant is passed as an extra argument. sub knock { my $self = shift; if ($self->{knocked}++ > 5) { $self->$secret_door(); # *** } }
this stupified me... at *** , the RHS of -> is a coderef
OK, looking at perlop reveals
Otherwise, the right side is a method name or a simple scalar variable containing either the method name or a subroutine reference, and the left side must be either an object (a blessed reference) or a class name (that is, a package name). See perlobj.
but seeking thru perlobj doesn't give me any more infos!
does anybody have a link to a perldoc with a complete definition of this magic behaviour?
Or: What should exactly happen when the RHS of -> is a coderef???
In this example, what is the difference to &$secret_door() except that $self is passed as first parameter? Is there any other difference?
I'm sure this has been discussed before but supersearch didn't help me find any clue...
Cheers Rolf
|
|---|