> sub traverse ( BinTree $top ( $left, $right ) ) { ... } L<S06/"Unpacking tree node parameters"> has two infelicities I wanted to fix with a patch. The first is that this style of unpacking is "really" syntactically a Signature, but most the examples in this section abbreviate out the optional colon. (The above is more formally spelled:
sub traverse ( BinTree $top :( $left, $right ) ) { ... } # or even... sub traverse :( BinTree $top :( $left, $right ) ) { ... } I'm ignoring the final version here.) The paragraph explaining this point, however, uses for its justification an example from the variable declaration world: > You may omit the top variable if you prefix the parentheses with a colon > to indicate a signature. Otherwise you must at least put the sigil of > the variable, or we can't correctly differentiate: > my Dog ($fido, $spot) := twodogs(); # list of two dogs > my Dog $ ($fido, $spot) := twodogs(); # one twodog object > my Dog :($fido, $spot) := twodogs(); # one twodog object Unless I'm mistaken, this doesn't cast back to subroutine signature land very well: sub f1 (Dog ($fido, $spot)) { ... } sub f2 (Dog $ ($fido, $spot)) { ... } sub f3 (Dog :($fido, $spot)) { ... } f1(twodogs()); # really a list of two dogs? f2(twodogs()); # one twodog object f3(twodogs()); # one twodog object Unless Audrey's latest S03 patch pertains here as well, and Dog distributes; in that case it would be as if the programmer had written sub f1 ([Dog $fido, Dog $spot]) { ... } as described in the preceding section, "Unpacking array parameters". If this is *not* the case, then f1 is not ambiguous! Please clarify, so I can clean up the confusing paragraph and introduce the optionality of the colon less jarringly. -- Gaal Yahas <[EMAIL PROTECTED]> http://gaal.livejournal.com/