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]; #### use strict; use warnings; use vars( @list0, @list1, @list2 ); sub DoSomething( \@ \@ \@ ) { my( $listRef0, $listRef1, $listRef2) = @_; #do something here push @$listRef0, somelist; push @$listRef1, somelist; push @$listRef2, somelist; } #main program DoSomething( \list0, \list1, \list2 ); #### use strict; use warnings; use vars( @list0, @list1, @list2 ); sub DoSomething() { #do something here push @list0, somelist; push @list1, somelist; push @list2, somelist; } #main program DoSomething();