Perl中不同的哈希声明

时间:2013-08-02 06:54:54

标签: perl hash

我知道:

my %hash = {};

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

my %hash = %{some values}

上面与此有什么不同?

my %hash = (some hash values);

2 个答案:

答案 0 :(得分:6)

没有

my %hash = {};

生成警告(你打开它们,对吗?):

Reference found where even-sized list expected at -e line 1.

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

my $hash_ref = {};

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

my %hash      = %$hash_ref;
my %also_hash = %{$hash_ref};          # Same as above.
$hash{key} eq $hash_ref->{key} or die; # Should survive.

此外,

%{ some values }

生成语法错误:

perl -we 'my $h = %{1, 2, 3, 4}'
syntax error at -e line 1, near "%{"

答案 1 :(得分:3)

区别在于您如何表达哈希的内容。 例如,使用下面的数组符号;你这样做:

my %hash = ( 'key 1' => 'value 1', 'key 2' => 'value 2');

%{}是一个强制转换运算符。通常在您引用显然不是哈希的内容时使用它。通常,对a的引用具有:

示例:

my $hashref;
$hashref->{'key 1'}='value 1';
$hashref->{'key 2'}='value 2';
my %hash = %{$hashref};