1 package Sub::ScalarLike;
4 use warnings FATAL => 'all';
5 use Variable::Magic qw(wizard cast dispell);
8 data => sub { +{ guard => 0, pkg => $_[1] } },
10 my ($var, $data, $name) = @_;
12 return if $data->{guard};
13 local $data->{guard} = 1;
15 my $pkg = $data->{pkg};
17 return if $pkg->can($name);
19 return if $name =~ /^__/; # __PACKAGE__ et. al.
21 my $fqn = join '::', $pkg, $name;
23 my $sub = sub () :lvalue { $pkg->_SCOPE->{$name} };
25 { no strict 'refs'; *$fqn = $sub }
34 cast %{"${pkg}::"}, $wiz, $pkg;
42 dispell %{"${pkg}::"}, $wiz;