traverse($in, 0, 0, sub {print ' ' x $_->{dept},'-',$_->{comm},"\n";}); ... later in the code... traverse($in, 0, 0, sub {$sth->execute($dept, $comm)}); #### sub _print { print ' ' x $_->{dept},'-',$_->{comm},"\n"; } traverse($in, 0, 0, \&_print); #### sub print_tree { push(@_, 0, 0, sub {print ' ' x $_->{dept},'-',$_->{comm},"\n";}); &traverse; } print_tree($in);