On Wed, 2002-04-17 at 20:25, drieux wrote:
> 
> I just found this in the perldoc
> 
> " Currently Perl subroutines have fairly limited
>         support for formal parameter lists. You can specify the
>         number of parameters and their type, but you still have to
>         manually take them out of the `@_' array yourself. Write a
>         source filter that allows you to have a named parameter
>         list. Such a filter would turn this:
> 
>             sub MySub ($first, $second, @rest) { ... }
> 
>         into this:
> 
>             sub MySub($$@) {
>                my ($first) = shift ;
>                my ($second) = shift ;
>                my (@rest) = @_ ;
>                ...
>             }
> "
> 
> does this still make sense?
> 
> does it improve the compiled object any?
> 
> and why not
> 
>       sub MySub($$@) {
>               my( $first, $second, @rest ) = @_;
>               ...
>       }
> 
> ????
> 
> 
> ciao
> drieux

The use of shift instead of () = @_ is mainly a style issue; however,
there is one important difference: when you call a subroutine like this
&subname -- note the lack of parenthesis -- the @_  variable gets passed
into it.  Shift removes elements from @_ so they don't trickle down.

As for formal parameters in Perl 5.x, they come with massive caveats:
only take effect if the sub is declared before it is seen in code, if
you say &subname() then the parameter definitions are ignored, the
parameter check is only done at compile time so it is useless for OO
code, and a pack of other warnings.  I really hope they straighten out
this mess for Perl 6 (from what I have been reading it looks like they
have).

-- 
Today is Pungenday the 35th day of Discord in the YOLD 3168


Missile Address: 33:48:3.521N  84:23:34.786W


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to