На этом шаге мы рассмотрим создание и использование конструкторов и деструкторов.
Конструктором в объектно-ориентированном программировании называется специальная подпрограмма, предназначенная для создания объекта. Деструктором называется подпрограмма, вызываемая для выполнения завершающих действий, связанных с ликвидацией объекта: закрытие файлов, вывод сообщений и т. д.
Для создания пакета, как мы знаем, требуется только его объявление (в том числе, предполагаемое по умолчанию объявление 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 Это тело программы Завершаем работу, до свидания
На следующем шаге мы рассмотрим автозагрузку.