Author: audreyt Date: Fri Aug 11 20:28:03 2006 New Revision: 10855 Modified: doc/trunk/design/syn/S06.pod Log: * S06: dconway++ suggested that we still provide convenience methods on Signature level, to reduce line noise in common "want" operations. * Also remove a stray paragraph miscommitted with the previous commit. Modified: doc/trunk/design/syn/S06.pod ============================================================================== --- doc/trunk/design/syn/S06.pod (original) +++ doc/trunk/design/syn/S06.pod Fri Aug 11 20:28:03 2006 @@ -13,9 +13,9 @@ Maintainer: Larry Wall <larry@wall.org> Date: 21 Mar 2003 - Last Modified: 11 Aug 2006 + Last Modified: 12 Aug 2006 Number: 6 - Version: 47 + Version: 48 This document summarizes Apocalypse 6, which covers subroutines and the @@ -1766,10 +1766,6 @@ Specifies that the parameter cannot be modified (e.g. assigned to, incremented). It is the default for parameters. -$x = 5; - -sub f ($x) {} - =item C<is rw> Specifies that the parameter can be modified (assigned to, incremented, @@ -1902,16 +1898,24 @@ ... } -You can also use the postfix signature syntax to test for compatibility: +Or use its shorthand methods to reduce line noise: + + if want.item {...} # called in non-lvalue scalar context + elsif want.list {...} # called in list context + elsif want.void {...} # called in void context + elsif want.rw {...} # expected to return an lvalue + +The C<.arity> and C<.count> methods also work here: - if want:($) {...} # called in scalar context - elsif want:(*@) {...} # called in list context - elsif want:($ is rw) {...} # expected to return an lvalue - elsif want:($,$) {...} # expected to return two values + if want.arity > 2 {...} # must return more than two values + if want.count > 2 {...} # can return more than two values -The C<.arity> method also works here: +Their difference is that C<.arity> considers only mandatory parts, +while C<.count> considers also optional ones, including C<*$>: - if want.arity > 2 {...} # expected to return more than two values + ($x, $y) = f(); # Within &f, want === :(*$?, *$?, *@) + # want.arity === 0 + # want.count === 2 =head2 The C<leave> function