Perl - стандарт кодирования
У каждого программиста, конечно же, будут свои предпочтения в отношении форматирования, но есть некоторые общие рекомендации, которые сделают ваши программы более легкими для чтения, понимания и обслуживания.
Самое главное, чтобы ваши программы всегда запускались с флагом -w. Вы можете явно отключить его для определенных частей кода с помощью прагмы no warnings или переменной $ ^ W, если необходимо. Вы также должны всегда работать в условиях строгого использования или знать причину, по которой нет. Также могут оказаться полезными прагмы use sigtrap и даже use diagnostics.
Что касается эстетики компоновки кода, единственное, что сильно заботит Ларри, - это то, что закрывающая фигурная скобка многострочного БЛОКА должна совпадать с ключевым словом, с которого началась конструкция. Помимо этого, у него есть и другие предпочтения, которые не столь сильны -
- Отступ до 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 неофициально резервирует имена модулей в нижнем регистре для модулей «pragma», таких как integer и strict. Другие модули должны начинаться с заглавной буквы и использовать смешанный регистр, но, вероятно, без подчеркивания из-за ограничений в представлении примитивных файловых систем имен модулей как файлов, которые должны умещаться в несколько разреженных байтов.
Если у вас действительно сложное регулярное выражение, используйте модификатор / x и вставьте немного пробелов, чтобы оно выглядело менее похожим на линейный шум. Не используйте косую черту в качестве разделителя, если в вашем регулярном выражении есть косая черта или обратная косая черта.
Всегда проверяйте коды возврата системных вызовов. Хорошие сообщения об ошибках должны поступать в STDERR, включая информацию о том, какая программа вызвала проблему, о том, каков был сбой системного вызова и аргументов, и (ОЧЕНЬ ВАЖНО) должно содержать стандартное системное сообщение об ошибке о том, что пошло не так. Вот простой, но достаточный пример -
opendir(D, $dir) or die "can't opendir $dir: $!";
Подумайте о возможности повторного использования. Зачем тратить мозги на одноразовый снимок, если вы, возможно, захотите сделать что-то подобное снова? Рассмотрите возможность обобщения вашего кода. Рассмотрите возможность написания модуля или класса объекта. Подумайте о том, чтобы ваш код работал чисто с использованием строгого использования и предупреждений (или -w). Подумайте о том, чтобы раздать свой код. Подумайте о том, чтобы изменить свое мировоззрение. Подумайте ... о, неважно.
Быть последовательным.
Будьте вежливы.