use strict; use warnings; use vars( @list0, @list1, @list2 ); sub DoSomething() { my( @localList0, @localList1, @localList2); #do something here my( @tempList ) = ( \@localList0, \@localList1, \@localList2 ); return @tempList; } #main program my @tempList = DoSomething(); push @list0, @$tempList[0]; push @list1, @$tempList[1]; push @list2, @$tempList[2];