Perl: Passing by reference does not modify the hash -
my understanding in perl pass hashes functions reference
consider following example, modify hash in modifyhash function
#!/usr/local/bin/perl %hash; $hash{"a"} = "1"; $hash{"b"} = "2"; print (keys %hash); print "\n"; modifyhash(\%hash); print (keys %hash); print "\n"; sub modifyhash { $hashref = @_[0]; %myhash = %$hashref; $myhash{"c"} = "3"; print (keys %myhash); print "\n"; } the output of script is:
ab abc ab i have expected be:
ab abc abc ...as pass hash reference.
what concept missing here passing hashes functions?
that's because when my %myhash = %$hashref;, you're taking copy of dereferenced $hashref , putting %myhash same thing my %myhash = %hash;, you're not working on referenced hash @ all.
to work on hash specified reference, try this...
sub modifyhash { $hashref = $_[0]; $hashref->{"c"} = "3"; print (keys %$hashref); print "\n"; } as pointed out thissuitisblacknot in comments below, @_[0] better written $_[0]. should using use strict; , use warnings;, have been caught. because you're sending in reference, have used my $hashref = shift;.
Comments
Post a Comment