Во-первых, обратите внимание, что я задаю этот вопрос из любопытства, и я знаю, что использование имен переменных, таких как @@
, вероятно, не очень хорошая идея.
При использовании двухлокальных кавычек (или оператор qq
) скаляры и массивы интерполируются:
$v = 5;
say "$v"; # prints: 5
[email protected] = 6;
say "[email protected]"; # prints: 6
@a = (1,2);
say "@a"; # prints: 1 2
Тем не менее, с именами массивов формы @
+ special char типа @@
, @!
, @,
, @%
, @;
и т.д. массив не интерполируется:
@; = (1,2);
say "@;"; # prints nothing
say @; ; # prints: 1 2
Итак, вот мой вопрос: кто-нибудь знает, почему такие массивы не интерполированы? Документировано ли это где угодно?
Я не мог найти никакой информации или документации об этом. В google (или SO) слишком много статей/сообщений об основах интерполяции, поэтому, возможно, ответ был просто скрыт в одном из них или на 10-й странице результатов.
Если вам интересно, зачем мне нужны имена переменных, например:
-
Флаг
-n
(и-p
на этот счет) добавляет точку с запятой;
в конце кода (я не уверен, что она работает на каждую версию perl, хотя). Поэтому я могу сделать эту программуperl -nE '[email protected],1;say"@a"}{[email protected]'
короче, вместо этогоperl -nE '[email protected];,1;say"@;"}{[email protected]'
, потому что последняя;
конвертировать[email protected]
в[email protected];
. Ну, на самом деле я не могу этого сделать, потому что@;
не интерполируется в двойных кавычках. Это не будет полезно каждый день, конечно, но в некоторых играх в гольф, почему бы и нет! -
Может быть полезно обфускать некоторый код. (полезно ли обфускация или нет, это еще одна дискуссия!)