没有引用的Perl参数修改
发布时间:2020-12-16 06:05:27 所属栏目:大数据 来源:网络整理
导读:我只是想要在不使用引用的情况下修改Perl子例程中的参数的概念.我在数组的情况下尝试了这个: sub test { print "Trying to change ... n"; $_[0] = "Third"; $_[1] = 100;}@a = ("First",1,"Second",2);print "Before change : @a n";test(@a);print "Aft
我只是想要在不使用引用的情况下修改Perl子例程中的参数的概念.我在数组的情况下尝试了这个:
sub test { print "Trying to change ... n"; $_[0] = "Third"; $_[1] = 100; } @a = ("First",1,"Second",2); print "Before change : @a n"; test(@a); print "After change : @a n"; 输出: Before change : First 1 Second 2 Trying to change ... After change : Third 100 Second 2 换句话说,通过更改@_的值来更改数组的元素. 但是在哈希的情况下做同样的事情并没有给出预期的行为: sub test { print "Trying to change ... n"; $_[0] = "Third"; $_[1] = 100; } %h = ("First" => 1,"Second" => 2); test(%h); foreach ( keys %h ) { print "$_n"; } 输出: Trying to change ... Second First 为什么这两种情况有所不同? 解决方法
Perl将一直通过引用传递.
因此,在数组示例中,每个元素都作为引用传递(因为对sub的输入只是’缩放器列表’,即数组).因此,当您更新sub中的元素时,实际上会更改引用原始数组中的值的值. 在散列的示例中,当Perl看到传递给子的散列时,它知道它不能发送散列,因此将其转换为散列数据的“缩放器列表”表示 – 这对于原始数据.此表示形式通过引用传递给您更新.因此,您不会像使用简单数组那样更新原始数据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |