Во-первых, обратите внимание, что я задаю этот вопрос из любопытства, и я знаю, что использование имен переменных, таких как @@, вероятно, не очень хорошая идея.
При использовании двухлокальных кавычек (или оператор 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];. Ну, на самом деле я не могу этого сделать, потому что@;не интерполируется в двойных кавычках. Это не будет полезно каждый день, конечно, но в некоторых играх в гольф, почему бы и нет! -
Может быть полезно обфускать некоторый код. (полезно ли обфускация или нет, это еще одна дискуссия!)