看板 Perl 關於我們 聯絡資訊
※ 引述《cutecpu (可愛中央處理器)》之銘言: : 想請問為什麼: : #!/usr/bin/perl -w : @arr = (1,2,3); : print @arr[2]; print $arr[2]; : 會出現:「Scalar value @arr[2] better written as $arr[2] at ./g.pl line 5.」 : 而以下 code 卻不會 : #!/usr/bin/perl -w : @arr = (1,2,3); : $ref = \@arr; : print @$ref[2]; # 我一直以為要寫成 ${$ref}[2] or $$ref[2] 才是對的 print $ref->[2]; : 謝謝^_^ : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 210.59.164.109 : → xatier:想一下 @arr[2] 是什麼XD 為什麼要前綴 @ 記號 04/23 21:10 : → firegsh:@arr[2]沒這寫法吧. 04/24 01:18 當然有 @arr[2] 這種寫法啦,這在 perldata(1) 裡面有提到,叫做 slice。 取自 manpage 的範例: @days # ($days[0], $days[1],... $days[n]) @days[3,4,5] # same as ($days[3],$days[4],$days[5]) @days{'a','c'} # same as ($days{'a'},$days{'c'}) print @arr[2] 傳回只有一個元素的 array,所以 print 出來的時候沒差,只是 剛好觸發 warnings (-w)。 而改用 reference 是因為 warnings 沒判斷這種用法,沒給出警告訊息。 其實你要的是 $arr[2] 或是 $ref->[2]。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.242.135.97 ※ 編輯: DarkKiller 來自: 210.242.135.97 (04/24 13:08)
l10nel:忘了有slice這回事,謝謝提醒 04/25 03:25
firegsh:我還真不知道orz 去確認了一次版本 04/26 12:07