If you're having trouble getting the recursion right, you must peek inside the structures that control your recursion, like %parent in this case. You could use something like
print Dumper \%parent;
But I don't see any code that adds entries to this hash. How recursion is being controlled if every time a URL passes through the code, it meets (apparently) the same conditions again? I think that self-referencing pages should be quite common.
As an aside note, most often you should not use subroutine calling like &passing(). Prefer plain passing().