Re: why doesn't this argument list need a comma after the 1st argument?




Quoth "Dave Slayton" <evad.notyals@xxxxxxxxx>:
Sorry, another newbie question:

I'm reading this very interesting book on Perl (Effective Perl Programming
by Joseph N. Hall with Randal L. Schwartz), and here on page 110 there's an
example of a
call to a (prototyped) subroutine that requires 3 arguments: a coderef, a
scalar, and an array, and here's the call:

for_n {print "$_[0], $_[1]\n"} 2, @a;

I understand the parentheses around the list of arguments are optional, and
that the anonymous subroutine does not require the "sub" keyword, but what I
don't understand is how the call gets away with not having a comma after the
closing curly brace and before the 2. Can anyone shed some light on this
for me?

It's a special case. Prototypes were introduced to allow you to write
subs that parse like Perl builtins; so, to allow a map-like sub to be
written, a sub with its first argument prototyped '&' will accept a bare
block (without a comma) like this, and treat it as an anon sub.

Actually, this is the only case where the sub keyword is optional: a sub
prototyped as ($&$) would still need to be called like

foo 1, sub {...}, 2;

See perldoc perlsub for all the details.

Ben

--
BEGIN{*(=sub{$,=*)=sub{print@_};local($#,$;,$/)=@_;for(keys%{ #ben@xxxxxxxxxxxx
$#}){/m/&&next;**=${$#}{$_};/(\w):/&&(&(($#.$_,$;.$+,$/),next);$/==\$*&&&)($;.$
_)}};*_=sub{for(@_){$|=(!$|||$_||&)(q) )));&((q:\:\::,q,,,\$_);$_&&&)("\n")}}}_
$J::u::s::t, $a::n::o::t::h::e::r, $P::e::r::l, $h::a::c::k::e::r, $,
.



Relevant Pages

  • RE: returning hashes, and arrays
    ... :> subroutine named link(). ... :> array interchangeably here. ... : 'Learning Perl'; ... : sub ParseLineForHomeAndVisitors; ...
    (perl.beginners)
  • Re: IO::Socket::INET on OSX or TCP stack problem
    ... just declaring vars outside a sub makes them static. ... SG> I am using perl -w - I dont usually, but while I am trying to figure ... SG> perl -w complains if you don't use prototypes. ... perl doesn't complain if you don't use prototypes. ...
    (comp.lang.perl.misc)
  • Re: Shifting Away
    ... are there two armed camps of Perl monks throwing gazillion megawatt ... daily at shift change and shout "When should I use an en dash?" ... become a bit less paranoid now but it's hard to let go of formal params. ... in the argument list and the sub could still change that. ...
    (comp.lang.perl.misc)
  • Re: Hardware hackers rejoice!
    ... I've tried to warm up to Perl ... sub getvar { ... # Given 0, the fan is off. ... # Display to LCD ...
    (Ubuntu)
  • Re: File::Find beginner question
    ... I am trying to use file::find to generate a list of leaf directories. ... Case matters for Perl modules, so it is better to call it File::Find. ... terminating the outer file::find loop. ... A sub *can* last out of a loop in ...
    (comp.lang.perl.misc)