I'm working on enhancing Perl6::Subs[*] to support more parameter
traits than just C<is required>.  I have some questions about
parameters and traits.  (These questions all apply to pure Perl 6,
which I know I won't be able to translate completely, but I want to
know which target I'm missing.)

 * Given a parameter C<Array @a>, it's obvious I'm not allowed to
   C<push @a,1>, because I didn't say C<is rw>.  But am I allowed to
   C<@a[0]++>?  How about C<@a[0][0]++>?  How deep is read-only-ness?

 * Similarly, how deep is the copy implied by C<is copy>?

 * Do traits attach syntactically to the variable name, or to the
   declaration as a whole?

     variable:     @a is rw of Array
                   Array @a is rw

     declaration:  @a of Array is rw
                   Array @a is rw

 * As far as I can tell, the choice of spelling an array parameter
   C<Array @a> or C<Array $a> is entirely cosmetic: both @a and
   $a are capable of holding an Array reference.  Is there actually
   a difference, e.g. in how they handle an undefined value?


[*] Shameless Plug:  Perl6::Subs is a source filter that lets you use
    much of the Perl 6 parameter syntax in your Perl 5 programs; and
    it enforces many constraints for you.  You can even add your own
    constraints with C<where BLOCK> subtyping.  Amaze your enemies!
    Confound your friends!  Use Perl6::Subs today!

-- 
Chip Salzenberg            - a.k.a. -            <[EMAIL PROTECTED]>
         Open Source is not an excuse to write fun code
            then leave the actual work to others.

Reply via email to