Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re: strange code (de)referencing behavior

by kennethk (Abbot)
on Feb 10, 2012 at 15:54 UTC ( #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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://953060]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (9)
As of 2018-03-17 15:21 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (224 votes). Check out past polls.