例子:
for my $key ( keys %DNS_CSV_FILES){
for my $file (@$DNS_CSV_FILES{$key}){
print $file;
}
}
給出錯誤:
Global symbol "$DNS_CSV_FILES" requires explicit package name (did you forget to declare "my $DNS_CSV_FILES"?) at dns.pl line 41.
Execution of dns.pl aborted due to compilation errors.
但是這段代碼:
for my $key ( keys %DNS_CSV_FILES){
for my $file (@{$DNS_CSV_FILES{$key}}){
print $file;
}
}
給出所需的輸出:
file1.txtfile2.txt
uj5u.com熱心網友回復:
@$x{ $key }是的縮寫@{ $x }{ $key },不是@{ $x{ $key } }。
請參閱Perl 取消參考語法。特別是腳注 [1]。只能在簡單的標量變數周圍省略花括號。
@{ $x }和之間沒有區別@$x。但這不是這兩個片段使用的。
第一個是 using @$x{ $key },它是 的縮寫@{ $x }{ $key }。
@{ $x }{ $key }和之間有區別@{ $x{ $key } }。
@foo{ $key }是命名陣列@{ ... }{ $key }的切片,參考陣列的切片也是如此。@{ $DNS_CSV_FILES }{ $key }因此是 scalar 參考的陣列的一個切片$DNS_CSV_FILES。
@foo是由名稱提供的陣列,@{ ... }參考陣列也是如此。@{ $DNS_CSV_FILES{ $key } }因此是哈希元素參考的陣列$DNS_CSV_FILES{ $key }。
uj5u.com熱心網友回復:
簡而言之,Perl 的解參考語法將大括號括在參考周圍。但是,如果參考是簡單的標量,您可以省略大括號,例如$value. 對于其他任何事情,包括哈希鍵查找,您都保留大括號。
那是老式的“circumfix”符號。Perl v5.24 穩定了后綴解參考語法。
uj5u.com熱心網友回復:
這
@$DNS_CSV_FILES{$key}
從左側會看到一個陣列 sigil@后跟一個 scalar $。這只能是陣列 ref 的取消參考。否則@是語法錯誤。盡管您將哈希表示法放在最后。這是一種競爭條件。所以它會假設下面是一個標量,而不是一個哈希值。
當你通過添加額外的括號來澄清時,它的意圖就變得很清楚了
@{ $DNS_CSV_FILES{$key} }
里面的內容@{ }必須是陣列 ref,并且$....{key}必須是哈希值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464662.html
標籤:perl
