Как работает оператор двойной стрелки (=>) в Perl? - PullRequest
19 голосов
/ 04 ноября 2010

Я знаю об использовании хэша оператора =>, , как это

$ cat array.pl
%ages = ('Martin' => 28,
         'Sharon' => 35,
         'Rikke' => 29,);

print "Rikke is $ages{Rikke} years old\n";
$ perl array.pl
Rikke is 29 years old
$

и я подумал, что это просто синтаксис для инициализации хэшей, но в ответах на Как я могу квалифицировать переменную как const / final в Perl? , => использовался так

use Readonly;
Readonly my $infilename => "input_56_12.txt";

Что именно означает =>? Есть ли еще способы использования =>?

Ответы [ 2 ]

34 голосов
/ 04 ноября 2010

Оператор => в perl в основном совпадает с запятой.Разница лишь в том, что если слева есть слово без кавычек, оно рассматривается как слово в кавычках.Таким образом, вы могли бы написать Martin => 28, что было бы так же, как 'Martin', 28.

. Вы можете создать хеш из любого четного списка, и это все, что вы делаете в своем примере.

Ваш пример только для чтения использует гибкость Perl с аргументами подпрограммы, опуская скобки.Это эквивалентно Readonly(my $infilename, "input_56_12.txt").Readonly - это функция, экспортируемая модулем Readonly, которая принимает два аргумента: ссылку и значение.Если вы хотите их понять, внутренности Readonly достойны другого вопроса.

Вот пример использования его в качестве запятой неожиданным образом:

$ perl -e 'print hello => "world\n"'
helloworld
30 голосов
/ 04 ноября 2010

С perlop :

Оператор => является синонимом запятая за исключением того, что вызывает левую операнд должен быть интерпретирован как строка если оно начинается с буквы или подчеркивание и состоит только из буквы, цифры и подчеркивания .

Это включает в себя операнды, которые могут в противном случае интерпретироваться как операторы, константы, однозначные v-строки или вызовы функций. Если есть сомнения по этому поводу поведение, левый операнд может быть цитируется явно.

В противном случае оператор => ведет себя точно так же, как оператор запятой или список разделитель аргументов, согласно контекст.

Например:

use constant FOO => "something";
my %h = ( FOO => 23 );

эквивалентно:

my %h = ("FOO", 23);

Это НЕ:

my %h = ("something", 23);

Оператор => полезен в документирование корреспонденции между ключи и значения в хешах и прочее парные элементы в списках .

%hash = ( $key => $value );
login( $username => $password );

С PBP :

Я нашел некоторую полезную информацию из Perl Best Practices о Жирных запятых =>, и я думаю, что здесь тоже неплохо бы упомянуть.

Лучше зарезервировать толстую запятую исключительно для следующих вещей: -

Используйте его при построении хеша :

my %h = ( FOO => 23 );

или при передаче именованных аргументов в подпрограмму т.е.,

$text = format_text({FOO => 23, BAR => 30});

или когда создает постоянную :

 Readonly my $FOO => "23";

Подробнее см. Раздел Глава 4: Значения и выражения (полные запятые) в Perl Best Practices.

...