有人可以在Perl中解释哈希吗?

Eri*_*sum 3 perl hash pointers function

主功能:

my %hash = {'inner1'=>{'foo'=>5},
            'inner2'=>{'bar'=>6}};
$object->State(0, %AMSValues);
Run Code Online (Sandbox Code Playgroud)

寄去:

sub State
{
   my ($self, $state, %values) = @_;
   my $value = \%values;
Run Code Online (Sandbox Code Playgroud)

据我所知,一个应该是哈希,另一个是指针,但......

哈希值

它看起来不像是这样的,

$value = $value->{"HASH(0x52e0b6c)"}
%values = $values->{"HASH(0x52e0b6c)"}
Run Code Online (Sandbox Code Playgroud)

yst*_*sth 13

use warnings; 总是.

您的:

my %hash = {'inner1'=>{'foo'=>5},
            'inner2'=>{'bar'=>6}};
Run Code Online (Sandbox Code Playgroud)

是不正确的; {}生成匿名哈希引用,%哈希获取单个键(该哈希引用已字符串化)和值undef.

你自找的:

my %hash = ('inner1'=>{'foo'=>5},
            'inner2'=>{'bar'=>6});
Run Code Online (Sandbox Code Playgroud)

至于传递子程序,你不能通过哈希; 像你这样的代码展示将哈希扁平化为一个列表,然后重新组合哈希@_,但这将是一个单独的副本.如果您确实需要相同的哈希,则必须传递哈希引用.