sub whatever { my $array_ref = shift; my @copy = ( @$array_ref ); @copy[1] = 'whatever'; } sub blah { my $array_ref = shift; local $array_ref->[0] = 'blah'; } sub test { my @array = @_; $array[2] = 'test'; } my $test = [ qw( 0 1 2 3 4 5 ) ]; whatever($test); blah($test); test($test); use Data::Dumper; print Dumper $test;