Mam trudności ze zrozumieniem odwołań do hasza i zmianą hasza zamiast zwracania go. Chcę napisać podprogram, który zwróci wartość z hasza, a także zmodyfikuje hasz. Miałem problemy podczas pisania kodu. Napisałem więc poniższy podstawowy kod, aby zrozumieć modyfikowanie hasza w miejscu.Poprawienie odwołania mieszania Perla w podprogramie
#!/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 "here\n";
print Dumper %hashVal;
print Dumper @arrVal;
Wyjście obserwowane jest:
There:$VAR1 = {
'check' => 1
};
$VAR1 = 'check';
$VAR2 = 2;
$VAR1 = [
1,
2,
3
];
here
$VAR1 = 'check';
$VAR2 = 1;
$VAR1 = 1;
$VAR2 = 2;
$VAR3 = 3;
Z wyjścia, mogę wywnioskować, że zmiany nie są hashDeref modyfikowania danych w odniesieniu. Czy moje zrozumienie jest poprawne? Czy istnieje sposób na zmodyfikowanie zmiennej hash zamiast jej zwrócenia.
Dziękuję "mu jest za krótki" – Sid