$VAR1 = 'ng1'; $VAR2 = [ 'ng1_1', 'ng1_2', 'ng1_3', 'ng1_4' ]; $VAR3 = 'ng2'; $VAR4 = [ 'ng2_1', 'ng2_2', 'ng2_3', 'ng2_4' ]; $VAR5 = 'ng3'; $VAR6 = [ 'ng3_1', 'ng3_2', 'ng3_3', 'ng3_4' ]; $VAR7 = 'ng1_1'; $VAR8 = [ 'ng1_1_1', 'ng1_1_2', 'ng1_1_3', 'ng1_1_4' ]; $VAR9 = 'ng1_1_1'; $VAR10 = [ 'ng1_1_1_u1', 'ng1_1_1_u2', 'ng1_1_1_u3' ]; $VAR11 = 'ng2_1'; $VAR12 = [ 'ng2_1_u1', 'ng2_1_u2', 'ng2_1_u3' ]; #### $VAR1 = 'ng1'; $VAR2 = [ 'ng1_1', [ 'ng1_1_1', [ 'ng1_1_1_u1', 'ng1_1_1_u2', 'ng1_1_1_u3' ], 'ng1_1_2', 'ng1_1_3', 'ng1_1_4' ], 'ng1_2', 'ng1_3', 'ng1_4' ]; $VAR3 = 'ng2'; $VAR4 = [ 'ng2_1', [ 'ng2_1_u1', 'ng2_1_u2', 'ng2_1_u3' ], 'ng2_2', 'ng2_3', 'ng2_4' ]; $VAR3 = 'ng3'; $VAR4 = [ 'ng3_1', 'ng3_2', 'ng3_3', 'ng3_4' ]; #### $VAR1 = 'ng1'; $VAR2 = [ 'ng1_1', [ 'ng1_1_1', [ 'ng1_1_1_u1', 'ng1_1_1_u2', 'ng1_1_1_u3' ], 'ng1_1_2', 'ng1_1_3', 'ng1_1_4' ], 'ng1_2', 'ng1_3', 'ng1_4' ]; $VAR3 = 'ng2'; $VAR4 = [ 'ng2_1', 'ng2_2', 'ng2_3', 'ng2_4' ]; $VAR5 = 'ng3'; $VAR6 = [ 'ng3_1', 'ng3_2', 'ng3_3', 'ng3_4' ]; $VAR7 = 'ng1_1'; $VAR8 = $VAR2->[1]; $VAR9 = 'ng1_1_1'; $VAR10 = $VAR2->[1][1]; $VAR11 = 'ng2_1'; $VAR12 = [ 'ng2_1_u1', 'ng2_1_u2', 'ng2_1_u3' ]; #### #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @arr = ( 'ng1', ['ng1_1','ng1_2', 'ng1_3', 'ng1_4'], 'ng2', ['ng2_1','ng2_2', 'ng2_3', 'ng2_4'], 'ng3', ['ng3_1','ng3_2', 'ng3_3', 'ng3_4'], 'ng1_1', ['ng1_1_1','ng1_1_2', 'ng1_1_3', 'ng1_1_4'], 'ng1_1_1', ['ng1_1_1_u1', 'ng1_1_1_u2', 'ng1_1_1_u3'], 'ng2_1', ['ng2_1_u1', 'ng2_1_u2', 'ng2_1_u3'] ); my @tree; #print "\nBEFORE CALLING FIRST FOR LOOP\n"; #print Dumper @arr; $tree[0] = $arr[0]; $tree[1] = $arr[1]; for (my $i=2; $i < @arr; $i+=2){ &buildTree(\@tree, $arr[$i], $arr[$i+1]); } #print "\nAFTER CALLING FIRST FOR LOOP\n"; #print Dumper @arr; #$tree[2] = $arr[2]; #$tree[3] = $arr[3]; #for (my $i=4; $i < @arr; $i+=2){ # &buildTree(\@tree, $arr[$i], $arr[$i+1]); #} sub buildTree{ my ($tree, $parNg, $subNg) = @_; for my $treeElement (@{$tree}){ if (ref $treeElement eq "ARRAY"){ &buildTree($treeElement, $parNg, $subNg); } else{ if ($treeElement eq $parNg){ my ($index) = grep { $tree->[$_] eq $treeElement } 0..scalar(@$tree)-1; splice @{$tree}, $index + 1, 0, $subNg; } } } }