Как "{}" (фигурные скобки) создает хеш и почему я могу хранить его как скаляр? - PullRequest
3 голосов
/ 22 ноября 2011

In perltoot это код:

$rec = {
  name  => "Jason",
  age   => 23,
  peers => [ "Norbert", "Rhys", "Phineas"],
};

Это строка или что-то вроде хэша (я думал, что хэши были объявлены с %)?

Ответы [ 2 ]

13 голосов
/ 22 ноября 2011

Это ссылка (своего рода указатель) на хеш. И ссылка (как и все, что начинается с '$' в 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");

Понимание ссылок важно не только для случайного программирования на Perl. Например, вам нужно использовать ссылки для создания вложенных структур (массивов массивов и т. Д.).

6 голосов
/ 22 ноября 2011

{ } создает как хеш, так и ссылку на него, и возвращает последний.

{ a => 1, b => 2 }

примерно эквивалентно

do { my %anon = ( a => 1, b => 2 ); \%anon }

Этот оператор задокументирован в perlref .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...