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
запрещает символические ссылки, требует объявления переменных (Лексическая область видимости) и запрещает использование необъявленных голых слов (Голые слова). Тогда как редкое использование символических ссылок необходимо для манипулирования таблицами символов (Использование и импортирование), использование переменной как имени переменной создаёт вероятность неочевидных ошибок действия на расстоянии — или, хуже, возможность для плоховалидированного пользовательского ввода манипулировать внутренними данными со злонамеренными целями.
Требование объявлений переменных помогает определить опечатки в именах переменных и поощряет использование соответствующих областей видимости лексических переменных. Намного проще видеть намеренную область видимости лексической переменной, если все переменные имеют объявления my
или our
в соответствующей области видимости.
strict
имеет лексическое действие, основанное на области видимости времени компиляции её использования (Использование и импортирование) и отключения (с помощью no
). Смотрите perldoc strict
для больших подробностей.
Прагма 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 или раньше, если вы вызываете методы на лексических дескрипторах файлов.
Perl 5 оставляет обработку ошибок (или игнорирование ошибок) вам. Если вы не достаточно внимательны, чтобы проверять, например, возвращаемое значение каждого вызова open()
, вы можете попытаться прочитать из закрытого дескриптора файла — или, хуже, потерять данные при попытке записать в него. Прагма autodie
изменяет поведение по умолчанию. Если вы напишете:
use autodie;
open my $fh, '>', $file;
…неудачный вызов open()
выбросит исключение. Учитывая, что наиболее подходящий подход для неудавшегося системного вызова — выбросить исключение, эта прагма может удалить много шаблонного кода и подарить вам душевное спокойствие от знания того, что вы не забыли проверить возвращаемое значение.
Эта прагма появилась в ядре Perl 5 с Perl 5.10.1. Смотрите perldoc autodie
для большей информации.