为什么第二次调用printHash时哈希为空?

my %hash = ();
addToHash(\%hash);
printHash(\%hash);

sub addToHash {
  my %hash = %{$_[0]};
  $hash{"test"} = "test";
  printHash(\%hash);
}

sub printHash {
  print "printHash: \n";
  my %hash = %{$_[0]};
  foreach my $key (keys %hash) {
      print "key: $key, value: $hash{$key}\n";
  }
}

输出:

printHash:

键:测试,值:测试

printHash:

最佳答案


sub addToHash {
  my %hash = %{$_[0]};
  $hash{"test"} = "test";
  printHash(\%hash);
}
my %hash创建一个新的哈希,您可以将参数引用的哈希复制到其中。你要
sub addToHash {
  my $hr = $_[0];
  $hr->{"test"} = "test";
  printHash($hr);
}

为了修改原始哈希。

关于perl - perl:子例程中添加的哈希条目丢失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12288989/

10-10 01:07