X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Findirect.git;a=blobdiff_plain;f=lib%2Findirect.pm;h=96ff670451cfdb73751bf28cb2a6adc0e5339ab4;hp=1b39ca5574c496e94dea84ace1f72c3eb0a62121;hb=8a6edfe3e713d47f83fcee92125f992769c67884;hpb=ff3c9826e97293d24f37e6c9ab6656f5803b4cd6 diff --git a/lib/indirect.pm b/lib/indirect.pm index 1b39ca5..96ff670 100644 --- a/lib/indirect.pm +++ b/lib/indirect.pm @@ -11,13 +11,13 @@ indirect - Lexically warn about using the indirect object syntax. =head1 VERSION -Version 0.15 +Version 0.19 =cut our $VERSION; BEGIN { - $VERSION = '0.15'; + $VERSION = '0.19'; } =head1 SYNOPSIS @@ -58,8 +58,14 @@ This module is B a source filter. =cut BEGIN { - require XSLoader; - XSLoader::load(__PACKAGE__, $VERSION); + if ($ENV{PERL_INDIRECT_PM_DISABLE}) { + *_tag = sub ($) { 1 }; + *I_THREADSAFE = sub () { 1 }; + *I_FORKSAFE = sub () { 1 }; + } else { + require XSLoader; + XSLoader::load(__PACKAGE__, $VERSION); + } } =head1 METHODS @@ -143,6 +149,32 @@ sub msg { True iff the module could have been built with thread-safety features enabled. +=head2 C + +True iff this module could have been built with fork-safety features enabled. +This will always be true except on Windows where it's false for perl 5.10.0 and below . + +=head1 DIAGNOSTICS + +=head2 C + +The default warning/exception message thrown when an indirect call on an object is found. + +=head2 C + +The default warning/exception message thrown when an indirect call on a block is found. + +=head1 ENVIRONMENT + +=head2 C + +If this environment variable is set to true when the pragma is used for the first time, the XS code won't be loaded and, although the C<'indirect'> lexical hint will be set to true in the scope of use, the pragma itself won't do anything. +In this case, the pragma will always be considered to be thread-safe, and as such L will be true. +This is useful for disabling C in production environments. + +Note that clearing this variable after C was loaded has no effect. +If you want to reenable the pragma later, you also need to reload it by deleting the C<'indirect.pm'> entry from C<%INC>. + =head1 CAVEATS The implementation was tweaked to work around several limitations of vanilla C pragmas : it's thread safe, and doesn't suffer from a C bug that causes all pragmas to propagate into Cd scopes. @@ -152,6 +184,9 @@ C (no semicolon) at the end of a file won't be seen as an indirect ob With 5.8 perls, the pragma does not propagate into C. This is due to a shortcoming in the way perl handles the hints hash, which is addressed in perl 5.10. +The search for indirect method calls happens before constant folding. +Hence C will be caught. + =head1 DEPENDENCIES L 5.8. @@ -181,6 +216,8 @@ Tests code coverage report is available at L