Non riesco a capire i riferimenti dell'hash e a modificare l'hash, invece di restituirlo. Voglio scrivere una routine secondaria che restituirà un valore dall'hash e modificherà anche l'hash. Stavo affrontando alcuni problemi durante la codifica per questo. Quindi, ho scritto il seguente codice di base per capire come modificare l'hash in atto.Perl modifica del riferimento hash nella subroutine
#!/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;
L'uscita osservata è:
There:$VAR1 = {
'check' => 1
};
$VAR1 = 'check';
$VAR2 = 2;
$VAR1 = [
1,
2,
3
];
here
$VAR1 = 'check';
$VAR2 = 1;
$VAR1 = 1;
$VAR2 = 2;
$VAR3 = 3;
Dall'output, ho dedotto che, cambiamenti hashDeref non modificano i dati nel riferimento. La mia comprensione è corretta? C'è un modo per modificare la variabile hash in luogo invece di restituirlo.
Grazie "mu è troppo corto" – Sid