Item1 => { SubItem1 => { SubSubItem1 => 1, SubSubItem2 => 1, SubSubItem3 => 1, }, SubItem2 => { SubSubItem1 => 1, SubSubItem2 => 1, SubSubItem3 => 1, }, }, Item2 => { ... #### sub hashref_to_treeview { my $hashref = shift; my $treeview = shift; # Win32::GUI::Treeview object my $parent_node = shift || 0; return unless ref($hashref) eq 'HASH'; for my $node ( sort keys %$hashref ) { my $new_node = $treeview->InsertItem(-text => $node, -parent => $parent_node); hashref_to_treeview($$hashref{$node}, $treeview, $new_node); } } #### my $id = 1; my $data = {}; my $table1_results = $dbh->selectall_arrayref('SELECT field1 FROM table1 WHERE id = ?', {Slice => {}}, $id); foreach my $field1 (@$table1_results) { $data->{$id}->{$table1_results->{field_of_interest}} = undef; my $table2_results = $dbh->selectall_arrayref('SELECT field2 FROM table2 WHERE field1 = ?', {Slice => {}}, $field1->{field1}); foreach my $field2 (@$table2_results) { $data->{$id}->{$table1_results->{field_of_interest}}->{$table2_results->{field_of_interest}} = undef; ... } } #### parent child1 child2 child3 -------- -------- -------- -------- value1 value2 value3 value4 value1 value2a value3 (null) ... #### sub recursion_test { my $array = shift; my @results; while(@$array > 1){ push @results, recursion_test($array); } return [$$array[0], undef]; }