-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Dear members of the mod_perl list,
I did not find an elegant, robust way of checking for the mod_perl version number. I propose an unelegant, robust way below for those interested. $ENV{MOD_PERL} is obviously not OK because the UNIX environment has the wrong semantics: it can be altered in too many places for starters, and not just from Perl (e.g. it's customary for security-minded code to reset all of %ENV to sane values, which makes parts of the app "forget" that they are running mod_perl). And it's inherited in child processes, so say when Apache forks/execs a helper written in Perl things tend to go from bad to worse. $mod_perl2::VERSION skips these drawbacks (it can only be altered from Perl and is not inherited) but it is currently not trustworthy either: $ perl -Mmod_perl2 -e 'print $mod_perl2::VERSION' 2.000001 BTW this problem triggers a bug in e.g. Apache::DB when several installations of mod_perl (1.26 and 2.000001 in my case) cohabit on the same system (I'm sending a separate bug report to Frank Wiles). The only reliable way of checking for mod_perl is by probing for an "unusual" feature of the Perl runtime, say an XS sub that the core of mod_perl provides directly. Here is the crock I'm currently using to that effect: sub mod_perl_version { my @discriminating_symbols = (2 => "Apache2::XSLoader::BOOTSTRAP", 1.99 => "Apache::XSLoader::BOOTSTRAP", 1 => "Apache::exit"); use B; while(my ($version, $discrimsymbol) = splice(@discriminating_symbols, 0, 2)) { no strict "refs"; next if (! exists &{$discrimsymbol}); my $bref = B::svref_2object(\&{$discrimsymbol}); next if ( (! defined $bref) || (! $bref->XSUB()) ); return $version; } return undef; } Not exactly pretty, but robust it is: "PerlSetupEnv Off" won't derail it, it works at every stage of the mod_perl state automaton including early initialization, and so on. FEATURE REQUEST: I'd love to get rid of the "use B;" crockery above, e.g. return mod_perl::version_running() if exists &mod_perl::version_running(); Best regards and thanks for all the great work! - -- Dominique QUATRAVAUX Ingénieur senior 01 44 42 00 08 IDEALX -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.5 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFCwrH9MJAKAU3mjcsRAr1mAJ41sytkT6zJJRpynMJQeVokeLii+gCfdcy9 EFOfI0IrtRo7m2VpHddDB2U= =YGaG -----END PGP SIGNATURE-----