Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: strange code (de)referencing behavior

by kennethk (Abbot)
on Feb 10, 2012 at 15:54 UTC ( [id://953060]=note: print w/replies, xml ) Need Help??


in reply to strange code (de)referencing behavior

If you modify your code to output the content of the incoming argument array,
sub parseAutorep { print join "\n", map defined ? "'$_'" : '<undef>', @_; }

your output will be

'Util' 'parse'
This is because (as documented in perlsub):
If a subroutine is called using the & form, the argument list is optional, and if omitted, no @_ array is set up for the subroutine: the @_ array at the time of the call is visible to subroutine instead. This is an efficiency mechanism that new users may wish to avoid.
The solution is to include parentheses in your call if you really want a null argument list. Alternatively, if you'd like the option of passing additional arguments, you could just shift both the package and subroutine name off the argument stack:
sub dispatch { my ($self, $fname) = (shift,shift); &{$dispatchTable{$fname}}; }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://953060]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2024-04-18 22:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found