perl foreach循环子程序
发布时间:2020-12-16 06:28:10 所属栏目:大数据 来源:网络整理
导读:我知道perl中的子程序通过引用传递arg.但是在下面的代码中,子例程中的foreach循环不应该更改@list的值,因为my $i应该创建一个新的词法范围var $i.对$i的任何赋值都应该是词法范围,但不能更改@list值. 任何人都可以解释在foreach循环中发生的事情导致值更改为
我知道perl中的子程序通过引用传递arg.但是在下面的代码中,子例程中的foreach循环不应该更改@list的值,因为my $i应该创建一个新的词法范围var $i.对$i的任何赋值都应该是词法范围,但不能更改@list值.
任何人都可以解释在foreach循环中发生的事情导致值更改为@list吗? sub absList { foreach my $i (@_) { $i = abs($i); } } @list = (-2,2,4,-4); absList(@list); print "@list"; 输出: 2 2 4 4 解决方法
由于
foreach 特征,$i被别名化为@_数组的元素(并且@_元素别名为@list的@list元素).
从perldoc
如果你想避免这种行为,不要直接在@_数组上迭代,即. sub absList { my @arr = @_; foreach my $i (@arr) { $i = abs($i); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |