X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Fsubs-auto.git;a=blobdiff_plain;f=lib%2Fsubs%2Fauto.pm;h=98b02e5636d0d521f3143b7a7b5456e22e5252d5;hp=3cc549d6dfb05107c06a33da74d0678baf259078;hb=f3015fc0f10b75a7e7073d450605029e3cf83978;hpb=d876ff436156a4746f13aad51501eb73e710137f diff --git a/lib/subs/auto.pm b/lib/subs/auto.pm index 3cc549d..98b02e5 100644 --- a/lib/subs/auto.pm +++ b/lib/subs/auto.pm @@ -5,12 +5,6 @@ use 5.010; use strict; use warnings; -use B::Keywords; - -use Symbol qw/gensym/; - -use Variable::Magic qw/wizard cast dispell getdata/; - =head1 NAME subs::auto - Read barewords as subroutine names. @@ -21,7 +15,10 @@ Version 0.05 =cut -our $VERSION = '0.05'; +our $VERSION; +BEGIN { + $VERSION = '0.05'; +} =head1 SYNOPSIS @@ -62,11 +59,19 @@ This module is B a source filter. =cut +use B; + +use B::Keywords; + +use Variable::Magic qw/wizard cast dispell getdata/; + BEGIN { unless (Variable::Magic::VMG_UVAR) { require Carp; Carp::croak('uvar magic not available'); } + require XSLoader; + XSLoader::load(__PACKAGE__, $VERSION); } my %core; @@ -84,9 +89,8 @@ BEGIN { my $tag = wizard data => sub { \(my $data = _REFCNT_PLACEHOLDERS ? 2 : 1) }; sub _reset { - my ($pkg, $func) = @_; - my $fqn = join '::', @_; + my $cb = do { no strict 'refs'; no warnings 'once'; @@ -97,14 +101,7 @@ sub _reset { $$data--; return if $$data > 0; - no strict 'refs'; - my $sym = gensym; - for (qw/SCALAR ARRAY HASH IO FORMAT/) { - no warnings 'once'; - *$sym = *$fqn{$_} if defined *$fqn{$_} - } - undef *$fqn; - *$fqn = *$sym; + _delete_sub($fqn); } } @@ -236,12 +233,12 @@ You have to open global filehandles outside of the scope of this pragma if you w L 5.10.0. -L (standard since perl 5), L (since 5.002). - L with C magic enabled (this should be assured by the required perl version). L. +L (standard since perl 5), L (since 5.006). + =head1 AUTHOR Vincent Pit, C<< >>, L.