Perl:特殊数组@_不是真的别名吗?
发布时间:2020-12-15 21:12:08 所属栏目:大数据 来源:网络整理
导读:传递给函数的所有参数都存在的特殊数组@_实际上是传递参数的别名.因此,我们直接对这个特殊数组@_进行的任何改变也将在主要内容中反映出来.这很清楚 #!/usr/bin/perluse warnings;use strict;$="n";sub func { print @_; $_++ for(@_);}my @arr=(2..4);pri
传递给函数的所有参数都存在的特殊数组@_实际上是传递参数的别名.因此,我们直接对这个特殊数组@_进行的任何改变也将在主要内容中反映出来.这很清楚
#!/usr/bin/perl use warnings; use strict; $="n"; sub func { print @_; $_++ for(@_); } my @arr=(2..4); print @arr; func(@arr); print "@arr"; 对于上述程序,我预计@arr和@_的引用指向相同的位置,因为它是一个别名.但是不是这样. 运行以上: ARRAY(0x1b644d0) ARRAY(0x1b644e0) 3 4 5 如果他们指向2个不同的位置,@_中的更改如何在@arr中反映? 我看到有什么不对吗请指教. 解决方法
这可能会回答你的问题:
use warnings; use strict; $="n"; sub func { print @_; $_++ for(@_); print $_ for @_; } my @arr=(2..4); print @arr; func(@arr); print "@arr"; print $_ for @arr; 产量 ARRAY(0x17fcba0) ARRAY(0x1824288) SCALAR(0x17fcc48) SCALAR(0x18196f8) SCALAR(0x1819710) 3 4 5 SCALAR(0x17fcc48) SCALAR(0x18196f8) SCALAR(0x1819710) 如你所见,单个参数具有相同的地址,但容器不一样.如果您在func中将某项推送到@_,则@arr不会更改(因此您可以在功能上进行移动).因此,每个参数都是别名,数组元素作为单个项目传递. @_包含传入子程序的所有项目.如果要修改数组参数,则需要通过引用传递它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |