Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^3: What's so bad about &function(...)?

by creamygoodness (Curate)
on Dec 07, 2005 at 18:56 UTC ( [id://514977]=note: print w/replies, xml ) Need Help??


in reply to Re^2: What's so bad about &function(...)?
in thread What's so bad about &function(...)?

If you don't specify arguments, it passes any existing @_.
#!/usr/bin/perl use strict; use warnings; yes_ampersand("yes\n"); no_ampersand("no\n"); sub foo { print $_[0]; } sub yes_ampersand { print $_[0]; &foo; } sub no_ampersand { print $_[0]; foo; }
Here's the output:
yes yes no Use of uninitialized value in print at ampersands.plx line 9.
--
Marvin Humphrey
Rectangular Research ― http://www.rectangular.com

Replies are listed 'Best First'.
Re^4: What's so bad about &function(...)?
by japhy (Canon) on Dec 07, 2005 at 20:31 UTC
    I made it clear in my original node that I'm not referring to a bare &foo, but rather &foo(...).

    Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
    How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart
      I should have elaborated. Here's "what's so bad about &function(...)":

      The ampersand has a very subtle quirk which arises when it is used without parentheses, as illustrated in my previous post.

      The directive "don't use the ampersand" is easy to understand and follow. If you get "bareword" errors, they generally cause catastrophic failure and are thus straightforward to troubleshoot, even for beginners.

      The use of parentheses to group arguments to a subroutine is not enforced by Perl. Usage is all over the place.

      The directive "go ahead use the ampersand, but only with parentheses" is more difficult for a beginner to adhere to, because in the vast majority of cases there is no penalty for omitting the parentheses. When they do finally hit a problem because they forgot the parens, it's not going to be a nice easy bareword crash -- it's going to be a silent killer.

      IMO, it's not reasonable to argue that there's no problem with &function(...) while punting on &function, and since there's a problem with &function, there's a problem with &function(...).

      Feel free to disagree. :)

      --
      Marvin Humphrey
      Rectangular Research ― http://www.rectangular.com
        That sounds to me as very illogical. You are afraid that, for the case of a function taking optional arguments, a beginner who uses & in front of the function name, might forget to use parenthesis? (Note that if the function requires arguments, omitting the parenthesis in combination of using & is a syntax error, and if the function doesn't use arguments, passing in some extras isn't going to hurt)

        Sounds too rare of a problem to get all dogmatic about.

        Perl --((8:>*

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (7)
As of 2024-04-18 02:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found