#!/usr/bin/perl # http://perlmonks.org/?node_id=1138867 use strict; use warnings; use Tk::ObjScanner; my @depth = {}; open (DATA, "data.txt");#same as what was in the example above while() { /\S/ or last; chomp $_; /([\| ]*?[\|`]-- )?(.*)/ or next; my $a=$1; my $b=$2; if (!defined($a)){ $a=""; } if (!defined($b)){ $b=""; } my $y=length($a); my $level = $y/4; $depth[$level]{$2} = $depth[$level + 1] = {}; } #use YAML; print Dump $depth[0]; close DATA; MainWindow->new->ObjScanner(caller => $depth[0])->pack; Tk::MainLoop;