Perl修改子例程中的哈希引用
发布时间:2020-12-15 21:39:14 所属栏目:大数据 来源:网络整理
导读:我无法理解哈希引用并更改哈希值,而不是返回它.我想编写一个子例程,它将从哈希返回一个值并修改哈希值.我在编写代码时遇到了一些问题.所以,我编写了以下基本代码来理解修改哈希的位置. #!/usr/local/bin/perl#Check hash and array references#Author: Sidar
我无法理解哈希引用并更改哈希值,而不是返回它.我想编写一个子例程,它将从哈希返回一个值并修改哈希值.我在编写代码时遇到了一些问题.所以,我编写了以下基本代码来理解修改哈希的位置.
#!/usr/local/bin/perl #Check hash and array references #Author: Sidartha Karna use warnings; use strict; use Data::Dumper; sub checkHashRef{ my ($hashRef,$arrVal) = @_; my %hashDeref = %{$hashRef}; $hashDeref{'check'} = 2; push(@{$arrVal},3); print "There:" ; print Dumper $hashRef; print Dumper %hashDeref; print Dumper $arrVal } my %hashVal = ('check',1); my @arrVal = (1,2); checkHashRef(%hashVal,@arrVal); print "heren"; print Dumper %hashVal; print Dumper @arrVal; 观察到的输出是: There:$VAR1 = { 'check' => 1 }; $VAR1 = 'check'; $VAR2 = 2; $VAR1 = [ 1,2,3 ]; here $VAR1 = 'check'; $VAR2 = 1; $VAR1 = 1; $VAR2 = 2; $VAR3 = 3; 从输出中我推断,对hashDeref的更改不会修改引用中的数据.我的理解是否正确?有没有办法修改哈希变量而不是返回它. 解决方法
这是%hashVal的(浅)副本:
my %hashDeref = %{$hashRef}; hash-ref $hashRef仍指向%hashVal但%hashDeref不指向,它只是一个副本.如果要在就地修改传递的hash-ref,那么使用传递的hash-ref: sub checkHashRef{ my ($hashRef,$arrVal) = @_; $hashRef->{'check'} = 2; #... 这将使您的更改保留在%hashVal中.在数组中,您永远不会复制,只需将其取消引用即可: push(@{$arrVal},3); 并且$arrVal的更改显示在@arrVal中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |