"Miko O'Sullivan" <[EMAIL PROTECTED]> writes:
> The current plans indicate that a subroutine's params should be defaulted
> like this:
>
>    sub load_data ($filename ; $version / /= 1) {...}
>
> (The space between / and / is on purpose, my emailer has problems if
> they are together.)  If that's the technique, how does the caller
> indicate that the second param is *supposed* to be undef?  If I were
> to call a sub like this:
>
>   load_data ($filename, undef);
>
> then I would expect that means that I am explicitly saying the
> second argument is supposed to be undef.  However, if I call it like
> this:
>
>   load_data ($filename);
>
> then I'm not sending the second param and it can be whatever the
> default is.  Ergo, I propose that / /= and simply = are both allowed
> and mean slightly different things:
>
>    # $version is 1 if the second param isn't sent at all
>    sub load_data ($filename ; $version = 1) {...}
>
>    # $version is 1 if the second param is undef
>    sub load_data ($filename ; $version / /= 1) {...}
>
> (Yes, this is a repeat of an earlier suggestion.  It was suggested I might
> repost reworded.)

I think you're right that this is a valid distinction, I'm just not
sure if it's not a little too subtle and that the two different
notations won't cause confusion. I *think* that the //= case is going
to be the more common one, and one could always handle the first case
more explicitly by doing:

   sub load_data ($filename; $version) {
      $version = 1 if @_.length < 2;
      ...
   }

Yes, it is undoubtedly uglier, but I don't think it's a common enough
case that that worries me.

-- 
Piers

   "It is a truth universally acknowledged that a language in
    possession of a rich syntax must be in need of a rewrite."
         -- Jane Austen?

Reply via email to