類似於AUTOLOAD
可用於按需定義子例程的方式,我想知道是否有一種方法可以綁定一個包的隱藏,以便可以攔截對該包中變量的訪問。在Perl中,有什麼方法可以綁定一個存儲?
我已經試過以下想法的各種排列,但沒有一個似乎工作:
{package Tie::Stash;
use Tie::Hash;
BEGIN {our @ISA = 'Tie::StdHash'}
sub FETCH {
print "calling fetch\n";
}
}
{package Target}
BEGIN {tie %Target::, 'Tie::Stash'}
say $Target::x;
這死與Bad symbol for scalar ...
就上線,而沒有打印"calling fetch"
。如果say $Target::x;
行被刪除,程序將正常運行並退出。我的猜測是失敗與存儲過程有關,但與哈希不同,所以標準關係機制不能正常工作(或者它可能僅僅是存儲查找從不會調用關係魔法)。
有誰知道這是可能的嗎?純Perl會是最好的,但XS解決方案是可以的。
如果你從'BEGIN'塊中取出'tie ...'調用,它會起作用嗎? – mob 2011-04-28 05:38:01
如果你以後再打領帶,perl已經去過了,並且找到了持有$ Target :: x的glob,所以沒有任何反應。嘗試運行perl -M0 = Terse foo.pl來查看原因。 – Alex 2011-04-28 09:11:04