簡體   English   中英

Perl中的匿名哈希

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM