※ 引述《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,
看起来似乎会覆蓋前面一笔的资料,是我哪里有误解或者是漏了吗?
感谢您~