title: Perl modifying hash reference in subroutine
body: <p>I am having trouble understanding the hash references and changing the hash in place, instead of returning it. I want to write a sub routine which will return a value from hash and also modify the hash. I was facing some issues while coding for it. So, I wrote the following basic code to understand modifying the hash in place. </p>
  
  <pre><code>#!/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;
  </code></pre>
  
  <p>The output observed is:</p>
  
  <pre><code>
  
      There:$VAR1 = {
            'check' => 1
          };
      $VAR1 = 'check';
      $VAR2 = 2;
      $VAR1 = [
            1,
            2,
            3
          ];
      here
      $VAR1 = 'check';
      $VAR2 = 1;
      $VAR1 = 1;
      $VAR2 = 2;
      $VAR3 = 3;
  
  </code></pre>
  
  <p>From the output, I inferred that, changes to hashDeref are not modifying the data in the reference. Is my understanding correct? Is there a way to modify the hash variable in place instead of returning it.</p>