Как работает оператор double arrow (=>) в Perl?
Я знаю о хэш-использовании оператора =>
, как это
$ 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";
Что означает =>
? Есть ли еще несколько способов использования =>
?
Ответы
Ответ 1
Оператор =>
в perl в основном совпадает с запятой. Единственное различие заключается в том, что если есть некорректное слово слева, оно обрабатывается как цитируемое слово. Таким образом, вы могли бы написать Martin => 28
, который был бы таким же, как 'Martin', 28
.
Вы можете сделать хэш из любого списка длины, который вы делаете в своем примере.
В вашем примере Readonly используется гибкость Perl с аргументами подпрограммы, опуская скобки. Это эквивалентно Readonly(my $infilename, "input_56_12.txt")
. Readonly - это функция, экспортированная модулем Readonly, которая принимает два аргумента: ссылку и значение. Внутренности Readonly достойны другого вопроса, если вы хотите их понять.
Вот пример использования его в виде запятой неожиданным способом:
$ perl -e 'print hello => "world\n"'
helloworld
Ответ 2
От 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 Fat Commas =>
, и я думаю, что было бы неплохо также упомянуть здесь.
Лучше зарезервировать жирную запятую исключительно для следующих вещей: -
Используйте его, когда построите хэш:
my %h = ( FOO => 23 );
или при передаче именованных аргументов подпрограммы, т.е.
$text = format_text({FOO => 23, BAR => 30});
или при создании константы:
Readonly my $FOO => "23";
Подробнее см. раздел Chapter4: Ценности и выражения (Fat Commas) в Perl Best Practices.