6 our @EXPORT = qw(defer undefer);
10 sub _getglob { no strict 'refs'; \*{$_[0]} }
14 my ($target, $maker, $undeferred_ref) = @{
15 $DEFERRED{$deferred}||return $deferred
17 ${$undeferred_ref} = my $made = $maker->();
18 { no warnings 'redefine'; *{_getglob($target)} = $made }
23 my ($target, $maker) = @_;
26 my $deferred = bless(sub {
27 goto &{$undeferred ||= undefer($deferred_string)};
28 }, 'Sub::Defer::Deferred');
29 $deferred_string = "$deferred";
30 $DEFERRED{$deferred} = [ $target, $maker, \$undeferred ];
31 *{_getglob $target} = $deferred;