"{}"(大括号)如何创建哈希,为什么我可以将其存储为标量?

kur*_*uki 3 perl hash

perltoot中是这个代码:

$rec = {
  name  => "Jason",
  age   => 23,
  peers => [ "Norbert", "Rhys", "Phineas"],
};
Run Code Online (Sandbox Code Playgroud)

这是一个字符串还是某种哈希(我认为哈希是用声明的%)?

leo*_*loy 13

它是哈希的引用(一种指针).一个引用(就像在Perl中以'$'开头的任何东西)是一个标量,在这种情况下是一个"指向"非标量值的标量.

  @ta = (10,20,30); # array
  $tb = [10,20,30]; # reference to an array
  %tc = (name => 'John', age => 23); # hash
  $td = {name => 'John', age => 23}; # reference to a hash

  print( $ta[1] . "\n");
  print( $tb->[1] . "\n");

  print( $tc{'name'} . "\n");
  print( $td->{'name'} . "\n");
Run Code Online (Sandbox Code Playgroud)

理解引用对于除了偶然的Perl编程至关重要.例如,您需要使用引用来创建嵌套结构(数组数组等).


ike*_*ami 6

{ } 创建哈希和对它的引用,并返回后者.

{ a => 1, b => 2 }
Run Code Online (Sandbox Code Playgroud)

大致相当于

do { my %anon = ( a => 1, b => 2 ); \%anon }
Run Code Online (Sandbox Code Playgroud)

perlref中记录了此运算符.