Yakalanan değişkenleri Sub::Quote tarafından oluşturulan kodda zayıflatmak istiyorum.Zayıflatma alt yazı kullanarak yakalar :: Alıntı
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
}
ve çıkış:
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;
}
ve çıkış:
foo
Can't use an undefined value as a subroutine reference [...]
Ve işte benim Alt :: Alıntı denemesi Örneğin, aşağıda olmayan alıntılanan alternatiftir
foo
foo
Açıkçası yakalanan $y
zayıflamıyor. Yakalanan değişkenleri zayıflatmak için üretilen kodu değiştirmenin bir yolu var mı?
Belgeler seyrek ve Sub::Quote
uygulaması karmaşıktır; Mevcut kodda bunun mümkün olmadığına oldukça inanıyorum, fakat yanlış olduğu görülmek isterim.
'Zayıflamış' aslında bir şey yapıyor mu? Eğer işe yaradıysa, $ y' yi zayıflattıktan hemen sonra 'un' (undef) 'a dönüşmesini beklerdim. – melpomene
@melpomene, CV ile ilgili ikinci bir referans var (Devel :: Peek'in 'Dump' kullanılarak görüldüğü gibi), ne olduğunu bilmeme rağmen. /// Dedi ki, '$ y = undef; ', OP'nin beklediği gibi altını serbest bırakmıyor demektir. 'Zayıflat' çağrısı demoyu etkilemeden kaldırılabilir. – ikegami
@ikegami İkinci referansın option'un kendisinde olduğunu varsayalım çünkü alt kısım bir kapanış değil, bu yüzden muhtemelen derleme sırasında oluşturuldu ve sadece sonsuza dek saklandı. – melpomene