#!/usr/bin/perl -w use strict; my %test; $test{'bio'}{900}{1} = 40; $test{'bio'}{900}{2} = 45; $test{'bio'}{901}{1} = 38; $test{'chem'}{1800}{1} = 27; $test{'chem'}{1800}{3} = 47; print_recursive(\%test); sub print_recursive { my ($hash,$depth) = @_; return unless $hash && ref($hash) =~ /HASH/i; $depth ||= 0; foreach my $key ( keys %{ $hash } ) { print "\t"x$depth, $key, "\n"; print_recursive($hash->{$key},$depth+1); } }