in reply to Need cleaner way to read @_ when dereferencing

First, you've got $ and @ mixed up. If you used warnings, you'd get a statement about 1-element array slices. That looks like it really should be:
sub myfunc($\@\@$) { my $var1 = $_[0]; my @arr1 = @{$_[1]}; my @arr2 = @{$_[2]}; my $var2 = $_[3]; }

Secondly, your second version is what should happen, except you don't have to dereference $tmp1 and $tmp2. You can replace as so:

@arr1[3] --- $tmp1->[3]

Hope that helps!

------
We are the carpenters and bricklayers of the Information Age.

Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.

Replies are listed 'Best First'.
Re: Re: Need cleaner way to read @_ when dereferencing
by Roy Johnson (Monsignor) on Jan 14, 2004 at 17:29 UTC
    you don't have to dereference $tmp1 and $tmp2
    Unless you want to work on a local copy.

    The PerlMonk tr/// Advocate
      If you want to edit and not have those changes reflected, yes. However, when using the \@ prototype, my experience is that you usually want to have your changes reflected in the array when you're done. In fact, most examples in the docs regarding prototypes and arrays involve things like my_push() and my_pop(), which do change their parameters. YMMV

      ------
      We are the carpenters and bricklayers of the Information Age.

      Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.

        This is an excellent point and well put. However, 2 arrays *are* being passed in the example, which is the other important usage of array-prototypes that comes to mind. But, anyway, I dislike prototypes and would just like to see a ref passed in the first place, but that's just me.

        ,welchavw