$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' ]; $VAR5 = 'ng3'; $VAR6 = [ 'ng3_1', 'ng3_2', 'ng3_3', 'ng3_4' ]; #### [0] ng1 [1][0] ng1_1 [1][1][0] ng1_1_1 [1][1][1][0] ng1_1_1_u1 [1][1][1][1] ng1_1_1_u2 [1][1][1][2] ng1_1_1_u3 [1][1][2] ng1_1_2 [1][1][3] ng1_1_3 [1][1][4] ng1_1_4 [1][2] ng1_2 [1][3] ng1_3 [1][4] ng1_4 [2] ng2 [3][0] ng2_1 [3][1][0] ng2_1_u1 [3][1][1] ng2_1_u2 [3][1][2] ng2_1_u3 [3][2] ng2_2 [3][3] ng2_3 [3][4] ng2_4 [4] ng3 [5][0] ng3_1 [5][1] ng3_2 [5][2] ng3_3 [5][3] ng3_4 #### # &findElementPosition(\@tree,"ng1_1_1_u3"); # sub findElementPosition{ my ($tree,$needle) = @_; for my $treeElement (@{$tree}){ if (ref $treeElement eq "ARRAY"){ push @position,0; &findElementPosition($treeElement,$needle); pop @position; $position[-1]++; } else{ if ($treeElement eq $needle){ for (@position){ print "[$_]" } print " " . $treeElement . "\n"; } $position[-1]++; } } } #### [1][1][1][2] ng1_1_1_u3 #### pop @position; $position[-1]--;