in reply to CGI::Appl can't find sub
AA.pm use strict use warning sub Abug1 {} sub Asub2 { BB::Bsub1(1,2,3); BB::Bsub2(hostname); # hostname is a "bareword" } sub Asub3 {}
Asub2() is only invoked at runtime via CGI::Applicaton run_modes(). The problem is that with "strict" enabled, barewords are not allowed as parameters to subroutine calls. Instead of reporting an error, the compilation is quietly aborted in the *next* subroutine when a single quote is found: resulting in all subsequent subroutines not being compiled. It also results in the program running for code that compiled and the offending subroutine working just fine. I could see that the other subroutines were missing in the debugger, I just couldn't figure out why. The key was running:
perl -MO=Terse AA.pm
It reports the offending line and where compilation is terminated. I'm glad I ignored the module description I found on perl.org:
"This module is useful for people who are writing their own back end, or who are learning about the Perl internals. It's not useful to the average programmer."
I expect that this is an unusual case because:
1. The resolution of the function doesn't occur until the specific web page is selected and is done as a string lookup.
2. The invocation of the subroutine is protected in "eval { }" so the program keeps on running.
Thanks for the input and I hope this can help someone in the future.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: CGI::Appl can't find sub
by Anonymous Monk on Jun 14, 2014 at 01:05 UTC | |
by jimt999 (Initiate) on Jun 14, 2014 at 03:16 UTC | |
by Anonymous Monk on Jun 14, 2014 at 09:31 UTC |