in reply to Passing Lists to Functions?

You should avoid using shift as the name of a subroutine. In this call:
@reduced_protein = shift (\@reduced_protein,($x2-$x1),($y2-$y1),($z2-$ +z1));
perl thinks you want the built-in shift function which takes an array (not an array ref) as the first argument.

Just rename your subroutine to something else, or qualify it with :::

some_package::shift(\@reduced_protein, ...);