X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2Fsubs%2Fauto.pm;h=d93706aa5f632e6e9137f90f5220924ce39426f7;hb=64760329f8a4af897da0b98bc7b9359690e35e9b;hp=7975e55fb7634e56f073c021efd522e33e2fea8c;hpb=bfb85519592a4c0212420c12dc1dc9bb14888db2;p=perl%2Fmodules%2Fsubs-auto.git diff --git a/lib/subs/auto.pm b/lib/subs/auto.pm index 7975e55..d93706a 100644 --- a/lib/subs/auto.pm +++ b/lib/subs/auto.pm @@ -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 @@ -119,15 +119,14 @@ sub _reset { sub _fetch { (undef, my $data, my $func) = @_; - return if $data->{guard}; - return unless $func !~ /::/ and not exists $core{$func}; - local $data->{guard} = 1; + return if $data->{guard} or $func =~ /::/ or exists $core{$func}; + $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; - if (do { no strict 'refs'; not *$fqn{CODE} and not *$fqn{IO}}) { + if (do { no strict 'refs'; not *$fqn{CODE} || *$fqn{IO}}) { my $cb = sub { my ($file, $line) = (caller 0)[1, 2]; ($file, $line) = ('(eval 0)', 0) unless $file && $line; @@ -141,14 +140,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 +176,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; } {