X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2Fsubs%2Fauto.pm;h=9046588b62a090a32b9bf137cc8c045e63cb7d88;hb=2c42189abfa0a714d32432958b6a63730114059c;hp=9978430ba004dbdf14ad6bd3c1e72633d2f463db;hpb=a8e5fe66564dd0cbb6a4e6c06af39b79c4e56878;p=perl%2Fmodules%2Fsubs-auto.git diff --git a/lib/subs/auto.pm b/lib/subs/auto.pm index 9978430..9046588 100644 --- a/lib/subs/auto.pm +++ b/lib/subs/auto.pm @@ -16,11 +16,11 @@ subs::auto - Read barewords as subroutine names. =head1 VERSION -Version 0.01 +Version 0.02 =cut -our $VERSION = '0.01'; +our $VERSION = '0.02'; =head1 SYNOPSIS @@ -53,7 +53,7 @@ You can pass options to C as key / value pairs : C<< in => $pkg >> -Specifies on which package the pragma should act. Defaults to the current package. +Specifies on which package the pragma should act. Setting C<$pkg> to C allows you to resolve all functions name of the type C in the current scope. You can use the pragma several times with different package names to allow resolution of all the corresponding barewords. Defaults to the current package. =back @@ -121,9 +121,9 @@ sub _fetch { (undef, my $data, my $func) = @_; return if $data->{guard}; return unless $func !~ /::/ and not exists $core{$func}; - local $data->{guard} = 1; + $data->{guard} = 1; my $hints = (caller 0)[10]; - if ($hints and $hints->{bareword}) { + if ($hints and $hints->{subs__auto}) { my $mod = $func . '.pm'; if (not exists $INC{$mod}) { my $fqn = $data->{pkg} . '::' . $func; @@ -141,14 +141,16 @@ sub _fetch { } else { _reset($data->{pkg}, $func); } + $data->{guard} = 0; return; } sub _store { (undef, my $data, my $func) = @_; return if $data->{guard}; - local $data->{guard} = 1; + $data->{guard} = 1; _reset($data->{pkg}, $func); + $data->{guard} = 0; return; } @@ -175,14 +177,14 @@ sub import { my %args = @_; my $cur = (caller 1)[0]; my $in = _validate_pkg $args{in}, $cur; - $^H{bareword} = 1; + $^H{subs__auto} = 1; ++$pkgs{$in}; no strict 'refs'; cast %{$in . '::'}, $wiz, $in; } sub unimport { - $^H{bareword} = 0; + $^H{subs__auto} = 0; } {