[英]Anonymous hash in perl
我開始學習Perl,因此嘗試在SO上閱讀一些文章。 現在,我遇到了這段代碼https://stackoverflow.com/a/22310773/2173773 (在此處略有簡化):
echo "1 2 3 4" | perl -lane'
$h{@F} ||= [];
print $_ for keys %h;
'
該代碼的作用是什么,為什么該代碼顯示4
?
我已經嘗試在http://perldoc.perl.org/perlreftut.html上研究Perl參考,但是我仍然無法弄清楚。
(我對這行感到困惑: $h{@F} ||= []
..)
-n
選項( -lane
一部分)使Perl為輸入的每一行執行給定的代碼。 -a
選項(與-n
或-p
選項一起使用時)使Perl在空格上分割輸入的每一行,並將字段存儲在@F
變量中。 $something ||= []
等同於$something = $something || []
$something = $something || []
; 即,僅當$something
已經為false或未定義時,才會將[]
(對空數組的引用)分配給變量$something
。 $h{@F}
是哈希%h
的元素。 因為此表達式以$
開頭(而不是@
),所以下標@F
在標量上下文中求值,而數組的標量上下文使數組求值至其長度。 由於Perl代碼只在1 2 3 4
行中執行,該行分為4個元素,因此@F
長度只有4個元素,因此$h{@F}
在這里等於$h{4}
(或,從技術上講, $h{"4"}
)。 因此, []
將分配給$h{"4"}
,並且因為4
是存在的哈希%h
的唯一元素,所以keys %h
將返回僅包含"4"
的列表,並打印此元素列表將打印4
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.