运行:为什么变量仍然稳居
$t = 3;
{
tie $t, 'Yep';
} # Expect $t to become untied here.
print $t;
package Yep;
sub TIESCALAR {
bless {}, 'Yep';
}
sub UNTIE {
print "UNTIE\n";
}
sub DESTROY {
print "DESTROY\n";
}
输出是:
Can't locate object method "FETCH" via package "Yep" at a.pl line 5.
DESTROY
预期输出是:
DESTROY
3
我想tie
变量$ T只为tie
所在范围的持续时间。在领域之外,它的表现必须与领带之前一样。因此,我将tie
包装到块中,并且预计在达到块末尾时会调用untie
(例如,在块末尾恢复值的'local',但对于绑定变量,我期望行为被恢复(untie $t
)) 。请注意0尚未超出范围。
[Cross-posted on perl5porters](http://www.nntp.perl.org/group/perl.perl5.porters/2015/10/msg231557.html)。泽夫拉姆的回答是:“这故意不是如何行事。搭售效果永久 变化问题的对象,在这种情况下,标量$ T,只要对象是否 效果持续。它不再是词汇范围 比块内的“$ t = 4”的效果更好。 – ThisSuitIsBlackNot
另外,请注意,在收到答案后,请不要完全改变您的问题。你使现有的答案无效,并使未来的访问者感到困惑,因为一些答案会解决你的新问题,一些答案将解决旧的,完全不同的问题。今后,请提出一个新问题。 – ThisSuitIsBlackNot
我很抱歉,但我不认为它是如此不同。我认为tie/untie以类似的方式工作:new/delete,inc/dec,创建/销毁。所以在文件范围的末尾(当程序结束时),我希望变量解开,并且在TIESCALAR中调用构造对象的DESTROY。因此,而不是隐式文件范围,我创建明确的'领带...'@ThisSuitIsBlackNot –