#! /usr/perl/bin use warnings; use strict; use Data::Dumper; sub process_array_ref { my $initial_array_ref = shift; my @processed_array; for my $element (@{$initial_array_ref}){ # do something with element # validate, normalise, error checking, # convert to metric, skip, whatever push @processed_array, sprintf(qq{processed: %s}, $element); } return \@processed_array; } my $initial_array_ref = ['a','b','c','d','e']; my $processed_array_ref = process_array_ref($initial_array_ref); print Dumper($processed_array_ref);