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

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

my $i=0;
while(i<3){
my %reg if($i==0);
$reg{A}=0 if($i==0);
$reg{B}=1 if($i==1);
$reg{C}=2 if($i==2);
print "$i\n";
print %reg;
$i++;
}

输出是
0
A0
1
B1
2
B1C2

为什么A0没有了?


QUOTE:
原帖由 bolod 于 2008-1-9 17:08 发表
my $i=0;
while(i

因为my %reg if($i==0);
去掉这个,或者定义在循环外面,就对了。
为什么呢?如果我的程序必须在循环内申明,应该怎么弄?
原理是什么?希望能解释下。


QUOTE:
原帖由 bolod 于 2008-1-9 17:56 发表
为什么呢?如果我的程序必须在循环内申明,应该怎么弄?
原理是什么?希望能解释下。

我也是初学,对my、local、our。。。理解不深。

你可以在循环里面定义:
our %reg if($i==0);
my $i=0;
while(i<3){
my %reg if($i==0);
$reg{A}=0 if($i==0);
$reg{B}=1 if($i==1);
$reg{C}=2 if($i==2);
print "$i\n";
print %reg;
$i++;
}


我也不明白,还请高手指点
不过通过这个例子倒是可以看出
通过自动赋值而定义的散列%reg,只是在while限定的范围内是个our全局变量

LZ,我十分不明白,你到底要干嘛
非要在循环里面my
你到底想做个什么事情呢?


QUOTE:
原帖由 CU_wanglijun 于 2008-1-10 11:09 发表
my $i=0;
while(i

这个能执行么?


QUOTE:
原帖由 perljoker 于 2008-1-10 13:33 发表

LZ,我十分不明白,你到底要干嘛
非要在循环里面my
你到底想做个什么事情呢?

你怎么每会都要说这句话
-你到底要干嘛-
每次看到这句 都知道你在发言
其实不是你的错 都是问题惹的祸


QUOTE:
原帖由 hitsubunnu 于 2008-1-10 16:22 发表

你怎么每会都要说这句话
-你到底要干嘛-
每次看到这句 都知道你在发言
其实不是你的错 都是问题惹的祸


貌似没有人规定在循环里面要写my吧?
楼上一位同志用了our,那就和外部定义一样了
如果你那里不是hash,而是一个标量,反应的结果要清晰,是个hash出那种结果很诡异
如果你的需求就很诡异,我就很汗了

如果你说了你要干嘛,我们就能帮你理解你的想法了
否则,循环里面用my,你还老问咋回事,然后还怪程序或者问题惹的祸,那就不好了

你确实没说你的问题是什么
因为我要自己写一个多层数据的xml文件的解析,
比如说有N个register,每个register里有name,address,以及N个regfield,每个regfield又有它的具体信息。。
用whiile进行逐行解析的时候,设想是外部申明一个数组,
于是想在while内部每个register建立一个hash,然后传给数组,
下一个reigiser再重新申明这个hash,.......不断添加知道结束。
所以要在while内部申明,不知道有没有说明白。
现在修改了下,用my实现了,可是不大明白在循环中my变量的具体变化,望达人指教一下。