]> git.vpit.fr Git - perl/modules/subs-auto.git/blobdiff - lib/subs/auto.pm
Get rid of Symbol and delete the code slot in XS
[perl/modules/subs-auto.git] / lib / subs / auto.pm
index 3cc549d6dfb05107c06a33da74d0678baf259078..98b02e5636d0d521f3143b7a7b5456e22e5252d5 100644 (file)
@@ -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<not> 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<perl> 5.10.0.
 
-L<Carp> (standard since perl 5), L<Symbol> (since 5.002).
-
 L<Variable::Magic> with C<uvar> magic enabled (this should be assured by the required perl version).
 
 L<B::Keywords>.
 
+L<Carp> (standard since perl 5), L<XSLoader> (since 5.006).
+
 =head1 AUTHOR
 
 Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>.