my %data = ( 'main' => 'Top Level', 'pc' => ( 'main' => 'PC Software', 'gfx' => ( 'main' => 'Graphics', ... ), .... ) ...); #### sub get_catagory_path { my @paths = split /\//, $_[0]; # may need to play with leading / my @catagories; my $working_hash = \@data; foreach $dir ( @paths ) { push @catagories $working_hash->{'main'}; $working_hash = $working_hash->{ $dir }; } return join '/', @catagories; }