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) {
}
sub _fetch {
- (undef, my $data, my $func) = @_;
+ (undef, my $data, my $name) = @_;
- return if $data->{guard} or $func =~ /::/ or exists $core{$func};
+ return if $data->{guard};
local $data->{guard} = 1;
+ return if $name =~ /::/
+ or exists $core{$name};
+
+ my $op_name = $_[-1] || '';
+ return if $op_name =~ /method/;
+
my $pkg = $data->{pkg};
my $hints = (caller 0)[10];
if ($hints and $hints->{+(__PACKAGE__)}) {
- my $pm = $func . '.pm';
+ my $pm = $name . '.pm';
return if exists $INC{$pm};
- my $fqn = $pkg . '::' . $func;
- my $cb = do { no strict 'refs'; *$fqn{CODE} };
+ my $fqn = $pkg . '::' . $name;
+ my $cb = do { no strict 'refs'; *$fqn{CODE} };
if ($cb) {
if (_REFCNT_PLACEHOLDERS and defined(my $data = getdata(&$cb, $tag))) {
++$$data;
no strict 'refs';
*$fqn = $cb;
} else {
- _reset($pkg, $func);
+ _reset($pkg, $name);
}
return;
}
sub _store {
- (undef, my $data, my $func) = @_;
+ (undef, my $data, my $name) = @_;
return if $data->{guard};
local $data->{guard} = 1;
- _reset($data->{pkg}, $func);
+ _reset($data->{pkg}, $name);
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;
}
my %args = @_;
- my $cur = (caller 1)[0];
+ my $cur = caller;
my $in = _validate_pkg $args{in}, $cur;
++$pkgs{$in};
{