Что такое двойное подчеркивание в Perl?

Я пытаюсь понять чужой код Perl, не зная самого Perl. Буду признателен за вашу помощь.

Я столкнулся с функцией Perl по этим направлениям:

MyFunction($arg1,$arg2__size,$arg3)

Есть ли смысл в синтаксисе двойного подчеркивания в $arg2Или это только часть имени второго аргумента?

7 ответов

Решение

Нет особого смысла в использовании __ внутри имени переменной perl. Вероятно, это предпочтение программиста, особенно в том случае, если вы процитировали его в своем вопросе. Вы можете увидеть больше информации о именовании переменных perl здесь.

Как и в большинстве языков, подчеркивание является лишь частью идентификатора; особого смысла нет.

Но вы уверены, что это Perl? На переменных нет никаких сигил. Можете ли вы опубликовать больше контекста?

В контексте вашего вопроса, двойное подчеркивание не имеет никакого программного значения. Двойное подчеркивание означает что-то особенное для ограниченного числа значений в Perl, особенно __FILE__ & __LINE__, Это специальные литералы, в которых нет префикса с символом ($, % или же @) и интерполируются только вне кавычек. Они содержат полный путь и имя исполняемого файла и строку, которая выполняется. Смотрите раздел "Специальные литералы" в perldata или этот пост на Perl Monks.

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

Начальное подчеркивание часто используется для обозначения идентификатора только для локального использования, например, для неэкспортированных частей модуля. Это просто соглашение; переводчику все равно.

Ответ Марка, конечно, правильный, он не имеет особого значения.

Но я хочу отметить, что ваш пример совсем не похож на Perl. Переменные Perl не являются голыми словами. У них есть символы, как вы увидите по ссылкам выше. И у Perl нет "функций", у него есть подпрограммы.

Так что может возникнуть некоторая путаница в отношении того, на каком языке мы говорим.

Я вполне уверен, что arg2__size это просто имя переменной.

Вам нужно будет сказать интерпретатору, что "$arg2" - это имя переменной. а не "$arg2__size". Для этого вам нужно будет использовать круглые скобки. (Это использование похоже на использование в оболочке).

Это должно работать MyFunction ($ arg1, $ {arg2} __ size, $ arg3)

--Binu

Другие вопросы по тегам