#!/usr/bin/perl my $raw_graph = [ 'root', undef, [ "Amiri", "Test tubes are clear.", [ "Darla", "Jump!" ], [ "Jeff", "Daytime." ], ], [ "Ryan", "Oops.", ], ]; my $left = 1; my $id = 1; my $out = []; explorenode( $raw_graph, $out, $left, $id ); print "[ @$_ ]\n" for @$out; sub explorenode { my ( $node, $rows, $l, $i ) = @_; $left++; $id++; for ( 2 .. $#$node ) { explorenode( $node->[$_], $rows, $left, $id ); } push( @$rows, [ $i, $l, $left, $node->[0], $node->[1] ] ); $left++; } __END__ [ 3 3 4 Darla Jump! ] [ 4 5 6 Jeff Daytime. ] [ 2 2 7 Amiri Test tubes are clear. ] [ 5 8 9 Ryan Oops. ] [ 1 1 10 root ]