X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2Findirect.pm;h=c068be73fa8e42e43bbf961f4343ff698cc3c1ec;hb=12f5aa96d0f4d2275aafa29bc76c96a0d4f215a9;hp=d6890c44a078dfa8b8502b3ebea8dbfc13e3d402;hpb=d5b6423801b678bb09db6ed84c250be8f8a10ac4;p=perl%2Fmodules%2Findirect.git diff --git a/lib/indirect.pm b/lib/indirect.pm index d6890c4..c068be7 100644 --- a/lib/indirect.pm +++ b/lib/indirect.pm @@ -1,5 +1,7 @@ package indirect; +use 5.008; + use strict; use warnings; @@ -9,13 +11,13 @@ indirect - Lexically warn about using the indirect object syntax. =head1 VERSION -Version 0.07_02 +Version 0.11 =cut our $VERSION; BEGIN { - $VERSION = '0.07_02'; + $VERSION = '0.11'; } =head1 SYNOPSIS @@ -55,17 +57,32 @@ BEGIN { } sub import { - $^H{indirect} = undef; + $^H{+(__PACKAGE__)} = undef; + (); } +my $msg = sub { "Indirect call of method \"$_[1]\" on object \"$_[0]\"" }; + sub unimport { (undef, my $type) = @_; - $^H{indirect} = (defined $type and $type eq ':fatal') ? 2 : 1; + $^H |= 0x00020000; + my $cb = (defined $type and $type eq ':fatal') + ? sub { die $msg->(@_) } + : sub { warn $msg->(@_) }; + $^H{+(__PACKAGE__)} = _tag($cb); + (); } +=head1 CAVEATS + +C (no semicolon) at the end of a file won't be seen as an indirect object syntax, although it will as soon as there is another token before the end (as in C or C). + +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. + =head1 DEPENDENCIES -L 5.9.4. +L 5.8. L (standard since perl 5.006). @@ -93,7 +110,7 @@ Bram, for motivation and advices. =head1 COPYRIGHT & LICENSE -Copyright 2008 Vincent Pit, all rights reserved. +Copyright 2008-2009 Vincent Pit, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.