Hello all, I have the following question on which I would appreciate any insight.
I have written a failry simple multiplexing PerlTransHandler. Its task is to check the uri and if it matches a certain string then push an associated PerlHandler onto the stack. An example can make it clearer: Let's say I make the following request: GET /action1/arg1 The PerlTransHandler has a hash, mapping actions to modules like that: %h = ( '/action1' => My::Module1, '/action2' => My::Module2, ); so by checking all the keys of the hash against the uri with a regex it will eventually match the '/action1' and do the following: $r->push_handlers(PerlHandler => $h{action1}); More importantly it will also set the path_info to the rest of the uri, ie /arg1, so that it can later be read by the PerlHandler that was pushed onto the stack: $r->path_info('/arg1'); and finally: return OK; so that no other PerlTransHandler is invoked. Up to here everything works fine and eventually the PerlHander My::Module1 is invoked and the path_info is read correctly. My problem arose when I added some debugging info to the PerlTransHandler and I realized that it was actually invoked twice for each request! I realized this by tracing the current_callback, URI and path_info in my error logs. When I did that I got two consecutive entries from the translation handler: PerlTransHandler URI=/action1/arg1 path_info= PerlTransHandler URI=/arg1 path_info= PerlHandler URI=/action1/arg1 path_info=/arg1 My question is why does the second line appear? I never made an explicit request for this URI (/arg1). By doing some extra testing I realized that if I don't set the path_info in my PerlTransHandler then I avoid the duplication. But I still do not understand why if I set the path_info so that my PerlHandler can read its arguments from there I get the duplication effect. My scripts work perfectly well so this is more of an academic issue but still any help would be greatly appreciated. Many thanks, Giorgos