perl.org wrote:
> On Wed, 14 Jul 2004 15:45:52 -0400, Bob Showalter wrote
> > perl.org wrote:
> > > 
> > > I still don't understand the reasoning for this - how could adding
> > > more to the sub signature be worse than not having any?
> > 
> > This is explained in perldoc perlsub.
> 
> What section are you referring to? 

This section:

       It's probably best to prototype new functions, not retrofit
prototyping
       into older ones.  That's because you must be especially careful about
       silent impositions of differing list versus scalar contexts.  For
exam-
       ple, if you decide that a function should take just one parameter,
like
       this:

           sub func ($) {
               my $n = shift;
               print "you gave me $n\n";
           }

       and someone has been calling it with an array or expression returning
a
       list:

           func(@foo);
           func( split /:/ );

       Then you've just supplied an automatic "scalar" in front of their
argu-
       ment, which can be more than a bit surprising.  The old "@foo" which
       used to hold one thing doesn't get passed in.  Instead, "func()" now
       gets passed in a "1"; that is, the number of elements in "@foo".  And
       the "split" gets called in scalar context so it starts scribbling on
       your "@_" parameter list.  Ouch!

Follow Randal's advice if you don't like mine :~)

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to