"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?