while() { do stuff } # rather than @data = ; for (@data) { do stuff } # pass data to and from subs as a reference (effectively a pointer) # this saves making duplicate copies of data structures my $data_ref = process_data(\@data); sub process_data { my $ref = shift; for (@$ref) { do stuff } return $ref; }