В чем преимущество Сигилс в Perl?

Я понимаю правила с сигилами. Я могу делать хэши из списков и передавать ссылки с их посредственным отношением. Чего я не понимаю, так это тех преимуществ, которые сигилы предоставляют в Perl.

Некоторые из причин, которые я слышал:

  • Строковая интерполяция
    • В Ruby есть синтаксис "#{myVar}", который решает почти все эти проблемы, включая использование полных выражений, без необходимости прибегать к синтаксическому хаку "@{[$count + 1]}".
  • Readibility
    • Иды. И любой текстовый редактор, достойный веса, имеет подсветку синтаксиса.
  • Учет переменной subNamespacing
    • Позволение мне объявить $ foo и @foo как две разные переменные приведет только к краху в будущем.

Одна очень полезная функция в языке программирования - это согласованность. Мое любопытство заставляет меня спросить, объявляю ли я список как "@foos" и счетчик "$ count", как имеет смысл обращаться к элементам, говоря "$foos[$count]"? Ой! Но я могу использовать "@", если я читаю элементы в контексте списка; так что выражение "@foos[$idx1, $idx2]" теперь имеет смысл! Посмотрев на сигилу, я могу сказать, что я собираюсь читать массив вместо одного скаляра!

  • Я все еще могу сказать, что читаю один элемент, сказав "foos[count]"
  • Я все еще могу сказать, что читаю несколько элементов, говоря "foos[idx1, idx2]".
  • Я все еще могу сказать, что читаю одно значение, сказав "foos{key}"
  • Я все еще могу сказать, что читаю несколько значений, сказав "foos{key1, key2}"

Та же самая картина имеет место почти для любого случая, о котором я могу думать. Смысл того, что делается, ясен независимо от того, какой символ используется, или нет в этом отношении. Единственное отличие состоит в том, что я должен следить за контекстом и быть уверенным, что сигилы тоже находятся на одной линии;

1 ответ

Лучшее объяснение можно найти в perldata в perldoc. Они функционируют как статьи и местоимения на естественном языке.

Символ '$' семантически работает как английское слово "the" в том смысле, что он указывает на ожидаемое единственное значение.

Целые массивы (и фрагменты массивов и хэшей) обозначаются символом "@", который во многом аналогичен слову "эти" или "те" в английском языке, поскольку указывает на то, что ожидается несколько значений.

Perl 6 пошел другим путем, поэтому мнения об их ценности различны, но это теория, стоящая за ними.

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