看板 Perl 關於我們 聯絡資訊
※ 引述《flu (Crazy Rhythm)》之銘言: : 在上面的巢狀for內 : 當 ($i, $j, $all_pat2) == ( 5, ??, 'DD0')的時候 : 如果用下面這段: : #$i == 5 ; : #$all_pat2 == 'DD0' ; : # 也要讓%hash已經先用my在迴圈外宣告為lexical scope : $hash{"A".$i} = [ split(//, $all_pat2) ] ; : 那麼 @{ $hash{'A'.$i} } 就是你要的陣列 : $hash{A5}->[0], $hash{A5}->[1], $hash{A5}->[2] 的值就是 'D', 'D', '0' : 詳情可以看看 perlreftut : 或是google一下 hash of array, reference 之類的關鍵字 您好,小弟有研究一下perlreftut 與 reference http://ppt.cc/FkS0 參考了您的解說與以上的網址,程式碼如下 my %hash; my $hash_ref; 開檔讀檔 while (<FILEIN>){ if ($_ =~ /V { All = (\w+); }/){ push (@all_pat, $1); }} for ($i=0; $i<10;$i++){ for ($j=0; $j<3;$j++){ $all_pat2 = substr(@all_pat[$j],$i,1); $hash{"A".$i} = [split (//, $all_pat2)]; }} $hash_ref=\%hash; print "$hash_ref->{A1}[0]"; #預期是0,印出2 print "$hash{A4}->[0]"; #預期是9,印出D 是列印的方式有錯嗎? 如果改成 for ($j=0; $j<3;$j++){ $all_pat2 = substr(@all_pat[$j],$i,1); $hash{"A".$i} = [split (//, $all_pat2)]; print "$hash{A1}->[0]\n";} 會印出00222222222222222, 看起來似乎會覆蓋前面一筆的資料,是我哪裡有誤解或者是漏了嗎? 感謝您~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.253.119.79