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