Perl 数组问题
时间:2010-12-23
来源:互联网
Perl code
如代码所示,第一次替换后,怎么会改变了数组的内容?
按第二种方法就没有改变数组。
use warnings; use strict; my @list = ("123","124","125"); foreach(@list) { print $_,"\n"; } my $temp; foreach $temp(@list) { $temp =~ s/2/a/g;#HERE!! } foreach(@list) { print $_,"\n"; } my $i= 0; my $var; for($i=0; $i<scalar(@list); $i++) { $var = $list[$i]; $var =~ s/1/r/g;#HERE!! } foreach(@list) { print $_,"\n"; }
如代码所示,第一次替换后,怎么会改变了数组的内容?
按第二种方法就没有改变数组。
作者: wxgiter 发布时间: 2010-12-23
在一个foreach循环中,迭代器并不只是设置为数据(或称为列表)中的每个元素的值,它实际上是对数组的元素的引用。因此,在上面这个foreach循环中,如果修改该循环中的$temp,就能修改@list中的对应元素。
而后面的例子,你用$var中转了数据元素的值,显然就不再是对数组进行引用,而只是值的传递。
而后面的例子,你用$var中转了数据元素的值,显然就不再是对数组进行引用,而只是值的传递。
作者: havent_bao 发布时间: 2010-12-23
另外,我的习惯是,不论会不会改变这个值。我是不会直接对这个值进行修改。如果想改,我直接去改数组元素,如果不想改,就用变量去传递值。这样既容易读,也不易错。
作者: havent_bao 发布时间: 2010-12-23
foreach循环的控制变量($temp)不是列表元素的备份,它本身就逐次代表列表的元素本身,循环时如果修改了变量,原始的列表元素就会被修改。
作者: sunming2008 发布时间: 2010-12-23
第二种方法,已经把数组元素copy到$var里了。当然不会修改原来的值。
第一种方法, foreach xxx ;这里的xxx应该是数组每个元素的一个ref
第一种方法, foreach xxx ;这里的xxx应该是数组每个元素的一个ref
作者: Aylazhang 发布时间: 2010-12-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28