Что упущено

Perl 5 не совершенен, но податлив — частично из-за того, что нет единой конфигурации, идеальной для каждого программиста и каждой цели. Некоторые полезные поведения доступны как базовые библиотеки. Ещё больше их доступно в CPAN. Ваша эффективность как Perl-программиста зависит от вашего использования этих улучшений.

Недостающие умолчания

Дизайн-процесс Perl 5 пытается предугадать новые направляения для языка, но в 1994 году невозможно было предсказать будущее таким, каким оно будет в 2011 году. Perl 5 расширил язык, но остался совместим с Perl 1 из 1987 года.

Лучший код на Perl 5 в 2011 году очень сильно отличается от лучшего кода на Perl 5 в 1994 году, или лучшего кода на Perl 1 в 1987 году.

Хотя Perl 5 содержит огромную базовую библиотеку, она не всеобъемлюща. Многие из лучших модулей Perl 5 существуют в CPAN (CPAN), а не в ядре. Метадистрибутив Task::Kensho включает несколько других дистрибутивов, которые представляют собой лучшее из того, что может предложить CPAN. Если вам нужно решить задачу, загляните сначала туда.

С учётом вышесказанного, несколько базовых прагм и модулей незаменимы для серьёзных Perl-программистов.

Прагма strict

Прагма strict (Прагмы) позволяет вам запретить (или вновь разрешить) разные мощные языковые конструкции, создающие потенциальную возможность непреднамеренных ошибок.

strict запрещает символические ссылки, требует объявления переменных (Лексическая область видимости) и запрещает использование необъявленных голых слов (Голые слова). Тогда как редкое использование символических ссылок необходимо для манипулирования таблицами символов (Использование и импортирование), использование переменной как имени переменной создаёт вероятность неочевидных ошибок действия на расстоянии — или, хуже, возможность для плоховалидированного пользовательского ввода манипулировать внутренними данными со злонамеренными целями.

Требование объявлений переменных помогает определить опечатки в именах переменных и поощряет использование соответствующих областей видимости лексических переменных. Намного проще видеть намеренную область видимости лексической переменной, если все переменные имеют объявления my или our в соответствующей области видимости.

strict имеет лексическое действие, основанное на области видимости времени компиляции её использования (Использование и импортирование) и отключения (с помощью no). Смотрите perldoc strict для больших подробностей.

Прагма warnings

Прагма warnings (Обработка предупреждений) контролирует сообщения о разных классах предупреждений в Perl 5, таких как попытка преобразовать в строку значение undef или использование со значениями неверного типа оператора. Она также предупреждает об использовании нерекомендуемых возможностей.

Наиболее полезные предупреждения объясняют, что Perl имеет сложности с пониманием того, что вы имели ввиду, и вынужден угадывать соответствующую интерпретацию. Даже несмотря на то, что Perl зачастую угадывает корректно, устранение неоднозначности с вашей стороны приведёт к уверенности, что программа работает корректно.

Прагма warnings имеет лексическое действие в области видимости времени компиляции её использования или отключения (с помощью no). Смотрите perldoc perllexwarn и perldoc warnings для больших подробностей.

Объедините use warnings с use diagnostics, чтобы получить расширенные диагностические сообщения для каждого предупреждения, присутствующего в вашей программе. Эта расширенная диагностика поступает из perldoc perldiag. Это поведение полезно при изучении Perl. Отключите его перед внедрением вашей программы, потому что оно производит многословный вывод, который может заполнить ваши логи и показать слишком много информации пользователям.

IO::File и IO::Handle

До Perl 5.14 лексические дескрипторы файлов были объектами класса IO::Handle, но вам требовалось явно загрузить IO::Handle, прежде чем вы могли вызывать на них методы. С Perl 5.14 лексические дескрипторы файлов — экземпляры IO::File, и Perl сам загружает IO::File за вас.

Добавьте IO::Handle в код, запускающийся на Perl 5.12 или раньше, если вы вызываете методы на лексических дескрипторах файлов.

Прагма autodie

Perl 5 оставляет обработку ошибок (или игнорирование ошибок) вам. Если вы не достаточно внимательны, чтобы проверять, например, возвращаемое значение каждого вызова open(), вы можете попытаться прочитать из закрытого дескриптора файла — или, хуже, потерять данные при попытке записать в него. Прагма autodie изменяет поведение по умолчанию. Если вы напишете:

    use autodie;

    open my $fh, '>', $file;

…неудачный вызов open() выбросит исключение. Учитывая, что наиболее подходящий подход для неудавшегося системного вызова — выбросить исключение, эта прагма может удалить много шаблонного кода и подарить вам душевное спокойствие от знания того, что вы не забыли проверить возвращаемое значение.

Эта прагма появилась в ядре Perl 5 с Perl 5.10.1. Смотрите perldoc autodie для большей информации.