在Perl中打印哈希对

Bri*_*ite 3 perl hashtable

请问这两个哈希初始化方法有什么区别?

第一种方法:

$items{"food"} = "4.4";
$items{"water"} = "5.0";
$items{"shelter"} = "1.1";

foreach $item (keys $items) {
    print "$item\n";
}
Run Code Online (Sandbox Code Playgroud)

输出是:

food
water
shelter
Run Code Online (Sandbox Code Playgroud)

第二种方法:

%items = { 
    'food' => '4.4', 
    'water' => '5.0', 
    'shelter' => '1.1' 
};

foreach $item (keys %items) {
    print "$item\n";
}
Run Code Online (Sandbox Code Playgroud)

输出是哈希引用:

HASH(0x8cc41bc)
Run Code Online (Sandbox Code Playgroud)

为什么第二种方法返回引用而不是实际值?

Sob*_*que 8

因为你误解了什么{}.

它创建一个匿名哈希,返回一个引用.

你刚刚完成的功能类似于:

my %stuff = (
   'food' => '4.4', 
    'water' => '5.0', 
    'shelter' => '1.1' 
);


my %items = \%stuff;
Run Code Online (Sandbox Code Playgroud)

这没有多大意义.

使用()给init散列,它会工作得很好.