Perl ändern hash-Referenz im Unterprogramm

Ich habe Probleme beim Verständnis der hash-Referenzen und die änderung der hash im Ort, anstatt es. Ich möchte schreiben eine sub-routine, die einen Wert zurückgeben von hash-und auch ändern Sie den hash. Ich war vor einigen Fragen, während Sie die Kodierung für Sie. Also schrieb ich das folgende basic-code zu verstehen, das ändern der hash im Ort.

#!/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;

Den Ausgang zu beobachten ist:



    There:$VAR1 = {
          'check' => 1
        };
    $VAR1 = 'check';
    $VAR2 = 2;
    $VAR1 = [
          1,
          2,
          3
        ];
    here
    $VAR1 = 'check';
    $VAR2 = 1;
    $VAR1 = 1;
    $VAR2 = 2;
    $VAR3 = 3;

Aus der Ausgabe, die ich daraus gefolgert werden, dass änderungen an hashDeref nicht das ändern der Daten in der Referenz. Ist mein Verständnis richtig? Gibt es eine Möglichkeit, ändern Sie die hash-variable im Ort, anstatt es.

InformationsquelleAutor Sid | 2012-04-13
Schreibe einen Kommentar