sub runsingle { my %rtoa; my @alljobs; ... some code that actually populates the declared variables... printjob($fh,$h,\@foo,\%rtoa,\@alljobs); ... } sub printjob { my $fh=$_[0]; my $h=$_[1]; my $keys = $_[2]; my $rtoa = $_[3]; my $alljobs $_[4]; foreach my $key (@{$keys}) { ...