一个困惑的问题

一个困惑的问题

一个困惑的问题
新手请教一个问题: print map{my$value=$_,$value++}(1,2,3);打印的结果却是102132?
这条语句怎么解释啊?谢谢了!
[CCB]10[/CCB]
change the sentence
加上换行更加容易理解一点
print "$_\n" foreach map{$value=$_,$value++}(1,2,3,4,5)
2
1
3
2
4
3
5
4
6
5
总共是五对数字,
其中 $value 被 ++ 增加以后变得比较大,而 ++ 操作的结果不会立刻修改 $value 所以比较小

只是你的结果有点怪,无论如何不会出现 0 的结果
我是酱紫理解的:{}里面的.
我是酱紫理解的:{}里面的语句其实是一条语句,声明了一个词法变量$value和另一个同名的全局变量({}内的全局)。看上去很奇怪,其实perl在内部是分开存储和处理词法变量和全局或local变量的,即使同名他们之间也完全不相干。就是那个逗号使之变成了一条语句,并产生了这两个变量(可以把逗号替换为分号,就能验证了),其初始值都为0。在perl书里提到过这点,如:my $a,$b;则$a为词法变量,$b为全局变量;要使$a和$b都为词法的,必须要加{}:my ($a,$b);
第一个被赋值后成了数组元素的值,而$value++仅仅能取出$value的值,运算之后才执行加1的动作,而加1后的值已经没有什么作用了,所以只能取出0。如果是++$value, 就能取出1,2,3。另外,第二个$value的值与传递进来的数组值没有关系,永远是0,1,2




   

如果使用use strict;的话,.
如果使用use strict;的话,楼主的语句是会报错的,所以我也就不指出问题所在了,不然又扯到编译方法上去了.
[quote]--D:\>perl -.
[quote]
D:\>perl -e "print (($v=1),$v++)"
21[/quote]
($v=1) 返回的是 $v 不是$v 的值, 然后第二个 $v++ 返回 1 ,此时 $v=2. 这时 print 里是 ($v,1),所以最后结果是 21

添一句,这样的用法请避免使用。免得让以后维护这样程序的人头痛。