my @array1 = (1,2); $arrayref = \array1; ($arrayref,$scalar1,$scalar2,$hashref) = my_sub(@array1,$scalar1,$scalar2); @array1 = @{$arrayref}; my %hash = %{$hashref}; print "$array[0]\n"; print "$hash{name}\n"; sub my_sub() { @array = @{shift()}; $s1 = shift(); $s2 = shift(); my %hash = {'name'=>'a', 'city'=>'b'}; $array[0] =3; $hash{name} = 'aaa'; return (\@array1,$scalar1,$scalar2,\%hash); }