Roboticus@Roboticus-PC ~ $ cat treemenu.pl use strict; use warnings; my %menu; my $hr; while () { chomp; my @keys = split /\|/,$_; next if @keys < 1; $hr = \%menu; while (my $k=shift @keys) { $$hr{$k} = {} unless exists $$hr{$k}; $hr = $$hr{$k}; } } dumptree('', \%menu); sub dumptree { my $indent = shift; my $hr = shift; for my $k (sort keys %$hr) { print $indent, $k, "\n"; if (keys %{$$hr{$k}}) { dumptree($indent." ", $$hr{$k}); } } } __DATA__ CDs Books|Adventure Movies|Music Books Books|Sports Movies Movies|Adventure Books|Drama CDs|Classic Roboticus@Roboticus-PC ~ $ perl treemenu.pl Books Adventure Drama Sports CDs Classic Movies Adventure Music Roboticus@Roboticus-PC ~ $