Что такое двойное подчеркивание в Perl?
Я пытаюсь понять чужой код Perl, не зная самого Perl. Буду признателен за вашу помощь.
Я столкнулся с функцией Perl по этим направлениям:
MyFunction($arg1,$arg2__size,$arg3)
Есть ли смысл в синтаксисе двойного подчеркивания в $arg2
Или это только часть имени второго аргумента?
7 ответов
Нет особого смысла в использовании __ внутри имени переменной perl. Вероятно, это предпочтение программиста, особенно в том случае, если вы процитировали его в своем вопросе. Вы можете увидеть больше информации о именовании переменных perl здесь.
Как и в большинстве языков, подчеркивание является лишь частью идентификатора; особого смысла нет.
Но вы уверены, что это Perl? На переменных нет никаких сигил. Можете ли вы опубликовать больше контекста?
В контексте вашего вопроса, двойное подчеркивание не имеет никакого программного значения. Двойное подчеркивание означает что-то особенное для ограниченного числа значений в Perl, особенно __FILE__
& __LINE__
, Это специальные литералы, в которых нет префикса с символом ($
, %
или же @
) и интерполируются только вне кавычек. Они содержат полный путь и имя исполняемого файла и строку, которая выполняется. Смотрите раздел "Специальные литералы" в perldata или этот пост на Perl Monks.
Что касается интерпретатора, подчеркивание - это еще один символ, допустимый в идентификаторах. Он может использоваться в качестве альтернативы конкатенации или верблюжьему падежу для формирования многословных идентификаторов.
Начальное подчеркивание часто используется для обозначения идентификатора только для локального использования, например, для неэкспортированных частей модуля. Это просто соглашение; переводчику все равно.
Ответ Марка, конечно, правильный, он не имеет особого значения.
Но я хочу отметить, что ваш пример совсем не похож на Perl. Переменные Perl не являются голыми словами. У них есть символы, как вы увидите по ссылкам выше. И у Perl нет "функций", у него есть подпрограммы.
Так что может возникнуть некоторая путаница в отношении того, на каком языке мы говорим.
Вам нужно будет сказать интерпретатору, что "$arg2" - это имя переменной. а не "$arg2__size". Для этого вам нужно будет использовать круглые скобки. (Это использование похоже на использование в оболочке).
Это должно работать MyFunction ($ arg1, $ {arg2} __ size, $ arg3)
--Binu