On 7/29/05, Ingo Blechschmidt <[EMAIL PROTECTED]> wrote: > Or is @args always readonly and the declaration ([EMAIL PROTECTED] is rw) is > an > error?
The declaration ([EMAIL PROTECTED] is rw) can't be outlawed as it is how Perl 5 default sig translates to Perl 6. IMHO @args as a parameter works like a 'my' variable in subroutine scope. In C<foo> arguments will be copied and (possibly) flattened (as the parameter is slurpy) and stuffed into @args. In C<bar> it is the same, but instead of copying, the elements of @args will be aliased to the actual parameter items. And the point here is "aliased to parameter ITEMS". If you change @args with a 'push' or other operation that changes the array, not its elements, it changes the subroutine variable, as the connection to @some_array were lost, leaving in the case of bar the connection to the elements of @some_array. In conclusion, foo @some_array; bar @some_array; are both ok, but changes are not seen from the caller's perpective, as 'push' operated on subroutine parameter @args. Only sub foobar (@args) { push @args, 42 } would change @some_array in foobar @some_array; That is how I undestood that. Can someone confirm this belief? Adriano.