发现个诡异的东西,大虾请解释下。。

我的理解是这样的,你看对不对

[Copy to clipboard] [ - ]
CODE:
my %tmp_hash;
my $i=0;
while($i<3){
   %tmp_hash=() if $i==0;
   #other codes
   $i++
}

上面写法不能满足你需求?
我这里仅仅是把hash清空,为何重声明呢?
貌似不能,因为传给数组的是该\%hash,如果仅仅清空,会覆盖原来的hash.


QUOTE:
原帖由 bolod 于 2008-1-11 17:21 发表
貌似不能,因为传给数组的是该\%hash,如果仅仅清空,会覆盖原来的hash.

我大概,可能知道你想要干什么了
你想从while里面取得一些东西,传递给外面的一个数组,数组里面是这些取得的hash的引用?

[Copy to clipboard] [ - ]
CODE:
my @array; my $flag=$#array;
while(...){
   $flag++ if $i==0
   $array[$flag]{A}=0 if ...;
   $array[$flag]{B}=0 if ...;
}

我怎么看都不需要用到while里面有个my啊
上面这样行么?

你说你用my解决了……你怎么解决的,能看看么?
我把要处理的数据基本格式和我写的解析传了一下,发现在my申明的那一次循环中不能对申明的hash再进行操作,不然会出错。
比如把20行的push操作提前到13行之后进行就会导致下次循环插入key,value时找不着上一次的hash。#刚开始学perl,理解也不深,麻烦指点下,让我加深点理解,还有perl编程的风格各方面,如果有更简单的写法请麻烦写一下,希望从每个点上多学到点东西。