我想削弱Sub::Quote生成的代码中捕获的变量。例如,这是未引用的替代方案:
use 5.10.0;
use Scalar::Util qw[ weaken ];
{
my $s = 'foo';
my $x = sub { say $s };
weaken( my $y = $x );
my $bar = sub { &$y };
&$bar;
$x = undef;
&$bar
}
和输出:
foo
Can't use an undefined value as a subroutine reference [...]
这是我的 Sub::Quote 尝试:
use 5.10.0;
use Sub::Quote;
use Scalar::Util qw[ weaken ];
{
my $s = 'foo';
my $x = sub { say $s };
weaken( my $y = $x );
my $bar = quote_sub( '&$y', { '$y' => \$y } );
&$bar;
$x = undef;
&$bar;
}
和输出:
foo
foo
显然被俘$y
并没有被削弱。有没有办法改变生成的代码来削弱捕获的变量?
文档稀少,Sub::Quote
实现复杂;我相当相信当前代码不可能做到这一点,但我很乐意被证明是错误的。