Учебники

Perl — стандарт кодирования

Каждый программист, конечно, будет иметь свои собственные предпочтения в отношении форматирования, но есть некоторые общие рекомендации, которые облегчат чтение, понимание и поддержку ваших программ.

Самое главное, чтобы ваши программы всегда запускались под флагом -w. Вы можете отключить его явно для определенных частей кода с помощью прагмы no warnings или переменной $ ^ W, если необходимо. Вы также должны всегда использовать строгие правила или знать причину, почему нет. Использование sigtrap и даже использование диагностических прагм также может оказаться полезным.

Что касается эстетики разметки кода, то единственное, что сильно волнует Ларри, это то, что закрывающая фигурная скобка многострочного BLOCK должна совпадать с ключевым словом, с которого начинается конструкция. Помимо этого, у него есть другие предпочтения, которые не так сильны —

  • Отступ в 4 столбца.
  • Открытие фигурных на той же строке, что и ключевое слово, если это возможно, в противном случае выстраиваются в линию.
  • Пробел перед открытием фигурного многострочного блока.
  • Однострочный БЛОК может быть помещен в одну строку, включая кудри.
  • Без точки с запятой.
  • Точка с запятой опускается в «короткий» однострочный БЛОК.
  • Пространство вокруг большинства операторов.
  • Пробел вокруг «сложного» индекса (внутри скобок).
  • Пустые строки между кусками, которые делают разные вещи.
  • Непослушные остальные.
  • Нет пробела между именем функции и открывающей скобкой.
  • Пробел после каждой запятой.
  • Длинные строки разбиты после оператора (кроме и и или).
  • Пробел после последнего совпадения скобок в текущей строке.
  • Выровняйте соответствующие элементы по вертикали.
  • Опускайте лишнюю пунктуацию, пока ясность не страдает.

Вот некоторые другие более существенные проблемы стиля, о которых нужно подумать: просто потому, что вы МОЖЕТЕ делать что-то определенным образом, не означает, что вы ДОЛЖНЫ делать это таким образом. Perl разработан, чтобы дать вам несколько способов сделать что-нибудь, поэтому подумайте о выборе наиболее читабельного. Например —

open(FOO,$foo) || die "Can't open $foo: $!";

Лучше чем —

die "Can't open $foo: $!" unless open(FOO,$foo);

Потому что второй способ скрывает основной смысл утверждения в модификаторе. С другой стороны,

print "Starting analysis\n" if $verbose;

Лучше чем —

$verbose && print "Starting analysis\n";

Потому что главное не в том, набрал ли пользователь -v или нет.

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

LINE:
for (;;) {
   statements;
   last LINE if $foo;
   next LINE if /^#/;
   statements;
}

Давайте посмотрим еще несколько важных моментов —

Не бойтесь использовать метки циклов — они предназначены для улучшения читабельности, а также для разрешения многоуровневых разрывов циклов. Смотрите предыдущий пример.

Избегайте использования grep () (или map ()) или `backticks` в пустом контексте, то есть когда вы просто отбрасываете их возвращаемые значения. Все эти функции имеют возвращаемые значения, поэтому используйте их. В противном случае используйте вместо этого цикл foreach () или функцию system ().

Для мобильности, при использовании функций, которые могут быть реализованы не на каждой машине, протестируйте конструкцию в eval, чтобы увидеть, не сработает ли она. Если вы знаете, в какой версии или уровне исправления была реализована конкретная функция, вы можете проверить $] ($ PERL_VERSION на английском языке), чтобы увидеть, будет ли она там. Модуль Config также позволяет запрашивать значения, определенные программой Configure при установке Perl.

Выберите мнемонические идентификаторы. Если вы не можете вспомнить, что означает мнемоника, у вас есть проблема.

Хотя короткие идентификаторы, такие как $ gotit, вероятно, подходят, используйте подчеркивание для разделения слов в более длинных идентификаторах. Как правило, легче читать $ var_names_like_this, чем $ VarNamesLikeThis, особенно для не носителей английского языка. Это также простое правило, которое работает в соответствии с VAR_NAMES_LIKE_THIS.

Имена пакетов иногда являются исключением из этого правила. Perl неофициально резервирует имена модулей в нижнем регистре для таких «прагматических» модулей, как integer и strict. Другие модули должны начинаться с заглавной буквы и использовать смешанный регистр, но, вероятно, без подчеркивания из-за ограничений в представлениях примитивных файловых систем имен модулей в виде файлов, которые должны вмещаться в несколько разреженных байтов.

Если у вас по-настоящему волосатое регулярное выражение, используйте модификатор / x и вставьте несколько пробелов, чтобы оно выглядело чуть менее как шум строки. Не используйте косую черту в качестве разделителя, если ваше регулярное выражение имеет косую черту или обратную косую черту.

Всегда проверяйте коды возврата системных вызовов. Хорошие сообщения об ошибках должны отправляться в STDERR, в том числе указывать, какая программа вызвала проблему, какими были сбойный системный вызов и аргументы, и (ОЧЕНЬ ВАЖНО) должно содержать стандартное системное сообщение об ошибке, указывающее, что произошло не так. Вот простой, но достаточный пример —

Подумайте о возможности повторного использования. Зачем тратить мозги на один выстрел, если вам захочется сделать что-то подобное снова? Подумайте об обобщении вашего кода. Попробуйте написать модуль или класс объектов. Подумайте над тем, чтобы ваш код выполнялся чисто с использованием строгих правил и с использованием предупреждений (или -w). Подумайте о том, чтобы отдать свой код. Подумайте об изменении вашего взгляда на мир. Подумай … о, неважно.

Быть последовательным.

Будь милым