in reply to reference question

I think you meant my ($myarray) = @_; in the second line.

Two common styles of paramater setting-up are shifts and assignment of @_. Sometimes they are mixed. Shift is a simple way to grab one argument. Assignment does them all. Shifting modifies the argument list, assignment doesn't.

For one parameter, it means the same thing, if you won't be using @_ anymore (so you don't care that you changed it).

Look at this:

my $this= shift; # ... do some checking here. my ($x,$y,$z)= @_;