#!/opt/perl/bin/perl # usage: regiontree < maps/regions my %regions; sub print_rec { my ($reg, $pad) = @_; print ((" " x ($pad * 4))."$reg\n"); for (@{$regions{$reg}->{child}}) { print_rec ($_, $pad + 1); } } my $curreg = ''; while () { if (/^region\s*(\S+)\s*$/) { $curreg = $1; $regions{$curreg} = {}; } elsif (/^parent\s*(\S+)\s*$/) { $regions{$1} = {} unless exists $regions{$1}; $regions{$curreg}->{parent} = $1; push @{$regions{$1}->{child}}, $curreg; } } for (sort grep { not $regions{$_}->{parent} } keys %regions) { print_rec ($_); }