На этом шаге мы рассмотрим создание и использование конструкторов и деструкторов.
Конструктором в объектно-ориентированном программировании называется специальная подпрограмма, предназначенная для создания объекта. Деструктором называется подпрограмма, вызываемая для выполнения завершающих действий, связанных с ликвидацией объекта: закрытие файлов, вывод сообщений и т. д.
Для создания пакета, как мы знаем, требуется только его объявление (в том числе, предполагаемое по умолчанию объявление package main). Вместе с тем, существуют специальные подпрограммы, выполняющие функции инициализации и завершения пакета. По аналогии их можно назвать конструкторами и деструкторами пакета, хотя никаких пакетов они не создают и не удаляют. Это подпрограммы BEGIN и END. При описании этих подпрограмм ключевое слово sub, необходимое при объявлении обычной подпрограммы, можно опустить. Таким образом, синтаксис подпрограмм BEGIN, END имеет вид:
BEGIN {block} END {block}
Подпрограмма BEGIN выполняется сразу после своего определения до завершения компиляции оставшейся части программы. Попробуйте запустить интерпретатор perl в интерактивном режиме. Если ему передать строку
print "Привет!";
BEGIN {print "Привет!"};
Можно определить несколько блоков BEGIN внутри файла, они будут выполняться один за другим в порядке определения.
Подпрограмма END выполняется настолько поздно, насколько это возможно, т.е. при завершении работы интерпретатора. Можно указать несколько блоков END, при этом они будут выполняться в порядке, обратном определению.
END { print "Завершаем работу, до свидания\n"; } BEGIN { print "Привет, начинаем работу\n"; } print "Это тело программы\n"; BEGIN { print "Еще один блок BEGIN после блока END\n"; }
Здесь сознательно выбран не совсем естественный порядок следования конструкторов и деструкторов BEGIN и END в тексте программы, чтобы подчеркнуть, в каком порядке они будут вызываться. Вывод выглядит так:
Привет, начинаем работу Еще один блок BEGIN после блока END Это тело программы Завершаем работу, до свидания
На следующем шаге мы рассмотрим автозагрузку.