]> git.vpit.fr Git - perl/modules/subs-auto.git/commitdiff
Use the op_info feature to prevent hooking of method calls
authorVincent Pit <vince@profvince.com>
Sun, 25 Jul 2010 09:57:59 +0000 (11:57 +0200)
committerVincent Pit <vince@profvince.com>
Sun, 25 Jul 2010 10:10:30 +0000 (12:10 +0200)
Makefile.PL
lib/subs/auto.pm

index ed2e049e1f88af060fae355c8cbc96ed3195d0a6..0f5fccb05ddce8e386951266605a27920b5f5a61 100644 (file)
@@ -14,7 +14,7 @@ $file = "lib/$file.pm";
 my %PREREQ_PM = (
  'B::Keywords'     => 0,
  'Carp'            => 0,
- 'Variable::Magic' => '0.08',
+ 'Variable::Magic' => '0.31',
  'XSLoader'        => 0,
 );
 
index 9ec068731be7f8660edc98329e626809bc03baed..928ea7e51bf8401b9f4648e9629d7ed27c88eac5 100644 (file)
@@ -63,7 +63,7 @@ use B;
 
 use B::Keywords;
 
-use Variable::Magic qw/wizard cast dispell getdata/;
+use Variable::Magic 0.31 qw/wizard cast dispell getdata/;
 
 BEGIN {
  unless (Variable::Magic::VMG_UVAR) {
@@ -108,9 +108,15 @@ sub _reset {
 sub _fetch {
  (undef, my $data, my $func) = @_;
 
- return if $data->{guard} or $func =~ /::/ or exists $core{$func};
+ return if $data->{guard};
  local $data->{guard} = 1;
 
+ return if $func =~ /::/
+        or exists $core{$func};
+
+ my $op_name = $_[-1] || '';
+ return if $op_name =~ /method/;
+
  my $pkg = $data->{pkg};
 
  my $hints = (caller 0)[10];
@@ -155,9 +161,10 @@ sub _store {
  return;
 }
 
-my $wiz = wizard data  => sub { +{ pkg => $_[1], guard => 0 } },
-                 fetch => \&_fetch,
-                 store => \&_store;
+my $wiz = wizard data    => sub { +{ pkg => $_[1], guard => 0 } },
+                 fetch   => \&_fetch,
+                 store   => \&_store,
+                 op_info => Variable::Magic::VMG_OP_INFO_NAME;
 
 my %pkgs;