Что такое двойное подчеркивание в Perl? - PullRequest
5 голосов
/ 19 сентября 2008

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

Я встречал Perl-функцию по следующим направлениям:

MyFunction($arg1,$arg2__size,$arg3)

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

Ответы [ 7 ]

11 голосов
/ 19 сентября 2008

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

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

11 голосов
/ 19 сентября 2008

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

2 голосов
/ 19 сентября 2008

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

2 голосов
/ 19 сентября 2008

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

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

1 голос
/ 20 сентября 2008

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

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

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

1 голос
/ 19 сентября 2008

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

0 голосов
/ 09 июня 2009

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

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

- Бину

...