in reply to Re^8: perlsub question..
in thread perlsub question..

x(@y) is not exactly the same as saying x($y[0], $y[1], ...). It differs when one of the elements does not exist. That's the point of this subthread.

And the documentation you cite does not apply; assigning to an array slice is not assigning to the array and does not remove the aliasing.

Try it.

Replies are listed 'Best First'.
Re^10: perlsub question..
by shmem (Chancellor) on Jun 25, 2007 at 07:00 UTC
    Try it.

    I do and see

    #!/usr/bin/perl use strict; use warnings; use Data::Dump::Streamer; sub x { print "\@_ number of elements: ", scalar(@_),"\n"; ($_[0],$_[2]) = qw(foo bar); @_[3,4,5,6,8] = (3,4,5,6,939); bar(@_); } sub bar { print 'bar @_=(',join(',',map{"'$_'"} @_),")\n"; $_[3] = 'quux'; } my @y; $y[3] = undef; x(@y); Dump(\@y); __END__ @_ number of elements: 4 bar @_=('foo','','bar','3','4','5','6','','939') $ARRAY1 = [ ( undef ) x 3, 'quux' ];

    that you are right. Assigning to ($_[0],$_[2]) has effect to @_, but there are no aliases to something in @y.

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}