| [reply] |
Altough the ampersand is not mandatory, I use it, in order to read my code easier. In my opinion it belongs to the structured perl programming style.
I would disagree. I think it is clumsy, confusing, needless and potentially problematic:
From perlfaq7:
What's the difference between calling a function as &foo
and foo()?
When you call a function as `&foo', you allow that
function access to your current @_ values, and you by-pass
prototypes. That means that the function doesn't get an
empty @_, it gets yours! While not strictly speaking a
bug (it's documented that way in the perlsub manpage), it
would be hard to consider this a feature in most cases.
When you call your function as `&foo()', then you do get a
new @_, but prototyping is still circumvented.
Normally, you want to call a function using `foo()'. You
may only omit the parentheses if the function is already
known to the compiler because it already saw the
definition (`use' but not `require'), or via a forward
reference or `use subs' declaration. Even in this case,
you get a clean @_ without any of the old values leaking
through where they don't belong.
Tony | [reply] |
Yes and no. Some of that is correct, some of it is misleading. I humbly suggest you read (tye)Re: A question of style which I think clears up some of this.
It is particularly unfortunate that the FAQ suggests using "foo()" since all-lowercase function names is the one case where I can recommend using "&foo()". It also overlooks the real potential for good error checking by intentionally leaving off the parens (for functions with mixed-case names).
-
tye
(but my friends call me "Tye")
| [reply] |
Yes and no. Some of that is correct, some of it is misleading.
Well, as all I posted was an extract from perlfaq7 from the bundled documentation with Perl, I would suggest that you submit a patch for the bits you think are misleading...
Thanks,
Tony
| [reply] |