$experiment{'title'}='some text'; $experiment{'data'}= [data set]; $experiment{'test condx'}= some ref to another hash table $experiment{'date run'}='some date'; #### #!/usr/bin/perl -w use strict; my %experiment1 = ( 'title' => "some title 1", 'data' => [ 1, 2, 3, 4, 5, 6], 'data2' => [10, 11, 12], ); my %experiment2 = ( 'title' => "some title 2", 'data' => [ 100, 101, 103,], 'data2' => [200, 300, 400], 'data3' => [500, 600, 700], ); my @experimentDB = (\%experiment1, \%experiment2); print_all_experiment_titles(\@experimentDB); print "printing dataset(s) for all experiments\n"; print_all_data(\@experimentDB); sub print_all_experiment_titles { my $ref_LoH = shift; foreach my $href (@$ref_LoH) { print "$href->{'title'}\n"; } } sub print_all_data { my $ref_LoH = shift; foreach my $href (@$ref_LoH) { foreach my $key2Lref (sort grep {/data/} keys(%$href)) { print "@{$href->{$key2Lref}}\n"; } } } __END__ The above prints: some title 1 some title 2 printing dataset(s) for all experiments 1 2 3 4 5 6 10 11 12 100 101 103 200 300 400 500 600 700