in reply to Re^8: Invoke sub whose name is value of scalar
in thread Invoke sub whose name is value of scalar

Oh. I see the problem and why I didn't see it before. Your problem is that you're mixing data structures. Try the following version of _create_node and _go_through:
_create_node ('p1',"pp1","first"); _create_node ('pp1',"ppp1","second"); _create_node ('ppp1',"pppp1","third"); _create_node ('pppp1',"ppppp1","root"); my $infos = _go_through('p1'); print Dumper $infos; { my %nodes; sub _create_node { my ($node_id,$parent,$node_info) = @_; @{$nodes{$node_id}}{qw/parent info/} = ($parent,$node_info); } sub _go_through { my ($node_id) = @_; return "" unless defined ${$nodes{$node_id}}{"info"}; my @info_nodes; while (${$nodes{$node_id}}{"info"} ne "root"){ push @info_nodes, (${$nodes{$node_id}}{"info"}); $node_id = ${$nodes{$node_id}}{"parent"}; ## Line 33 } return \@info_nodes; } }
I actually tested this code. :-)

My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?