my %hash; my @array; my $n = 1; $hash{"one$n") = "hi"; $n++; $hash{"one$n") = "hi 2 you too"; push @array, \%hash; my $n = 1; $hash{"two$n") = "hello"; $n++; $hash{"two$n") = "hello 2 you too"; push @array, \%hash; some_routine($n, \%some_other_hash, \@array); sub some_routine { #$n, and $h are other variables that may be passed to this routine. my ($n, $h, $array_of_hashes) = @_; foreach my $d (@{$array_of_hashes}) { print $d[0]{'one1'}; } #...also tried this... print $array_of_hashes[0]{'one1'}; print $array_of_hashes[0]{'one2'}; print $array_of_hashes[1]{'two1'}; print $array_of_hashes[1]{'two2'}; }