Perl модифицирует ссылку на хеш в подпрограмме

У меня проблемы с пониманием ссылок на хеш и изменением хэша на месте вместо его возврата. Я хочу написать подпрограмму, которая будет возвращать значение из хеша, а также изменять хэш. Я столкнулся с некоторыми проблемами при кодировании для него. Итак, я написал следующий базовый код, чтобы понять, как изменить хэш на месте.

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

Наблюдаемый вывод:



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

Из вывода я сделал вывод, что изменения в hashDeref не изменяют данные в ссылке. Правильно ли я понимаю? Есть ли способ изменить хеш-переменную вместо ее возврата.

9
задан Sid 13 April 2012 в 05:22
поделиться