Perl中不同的哈希声明

Bel*_*day 0 perl hash

我知道:

my %hash = {};
Run Code Online (Sandbox Code Playgroud)

得到一个匿名哈希,这个怎么样:

my %hash = %{some values}
Run Code Online (Sandbox Code Playgroud)

上面与此有什么不同?

my %hash = (some hash values);
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 6

没有.

my %hash = {};
Run Code Online (Sandbox Code Playgroud)

生成一个警告(你打开它们,对吧?):

Reference found where even-sized list expected at -e line 1.
Run Code Online (Sandbox Code Playgroud)

参考始终是标量.正确的方法是

my $hash_ref = {};
Run Code Online (Sandbox Code Playgroud)

要取消引用引用,可以使用以下语法:

my %hash      = %$hash_ref;
my %also_hash = %{$hash_ref};          # Same as above.
$hash{key} eq $hash_ref->{key} or die; # Should survive.
Run Code Online (Sandbox Code Playgroud)

此外,

%{ some values }
Run Code Online (Sandbox Code Playgroud)

生成语法错误:

perl -we 'my $h = %{1, 2, 3, 4}'
syntax error at -e line 1, near "%{"
Run Code Online (Sandbox Code Playgroud)