我在回顧Eric Strom先生的this question,尤其是response,並對其中更「神奇」的部分提出了疑問。請查看上下文鏈接的問題,因爲我只是想了解這個塊的內側部分:需要幫助理解腳本的部分(球體和參考文獻)
for (qw($SCALAR @ARRAY %HASH)) {
my ($sigil, $type) = /(.)(.+)/;
if (my $ref = *$glob{$type}) {
$vars{$sigil.$name} = /\$/ ? $$ref : $ref
}
}
因此,它遍歷三個字,打破各分爲兩個瓦爾,$sigil
和$type
。 if {}
塊是我不瞭解的。我懷疑(..)
內的部分獲得了$glob{$type}
內的符號引用......必須有一些「魔術」(我還不瞭解的底層機制的某些深奧元素)依賴於那裏來確定類型的「指向」數據?
下一行也是部分令人困惑。在我看來,我們正在分配到變量哈希,但是什麼是rhs在做什麼?我們在最後一次操作中沒有分配到$_
(分配了$ref
),那麼與/\$/
區塊中的比較是什麼?我的猜測是,如果我們正在處理一個標量(雖然我沒有看清楚我們是怎麼做的),但是我們去掉這個var並將其直接存儲在散列中,否則我們就存儲這個引用。
所以,只需要尋找這三行中發生的事情的一個小故事。非常感謝!
哦......我明白了。明確perl欺騙正在進行,但這是有點整潔!最後一點混淆......在原始鏈接答案中,變量'$ glob'存儲'* main :: eval_code'的值(例如,從測試腳本的輸出中複製;注意前導的'*') 。當'* $ glob {SCALAR}'被評估時,是評估(在僞代碼中)'*(* main :: eval_code){SCALAR}'? * *如何解決? – Jon 2014-10-09 16:53:25
關於使用'$ a'來達到自己的目的通常的懲罰! – Borodin 2014-10-09 17:00:23
@Jon,您知道簽名'''','@'和'%',也許您知道'&call_this_sub('a')'中的遺留CODE簽名',井符號有一個印記也是。最不爲人知的是'*',它告訴perl將其解決到系統表。 「符號」和typeglob幾乎是一回事。 – Axeman 2014-10-10 17:58:51