my @foo = qw(123 456 789); my @bar = qw(abc def ghi); sub qux(\@\@*) { print join "\t", @_, "\n"; my $foo = shift; my $bar = shift; print "foo: ", join "\t", @$foo, "\n"; print $FH "bar: ", join "\t", @$bar, "\n"; } qux(@foo, @bar, 'STDERR'); print "\n"; print \@foo . "\t" . \@bar; #### # the filehandle name must be quoted if you have strict subs enabled. process(@data,@set_up,$template, 'OUT'); # Process sub process (\@\@$*) { my $data_ref = shift(); my $set_up_ref = shift(); my $template = shift; #For unpack my $FH = shift; # The * gets us a handle reference foreach my $record (@data) { --do things--} }