О
СОДЕРЖАНИЕ
НАЗВАНИЕ
O - Общий интерфейс для бэкэндов Perl-компилятора
СИНТАКСИС
perl -MO=[-q,]Backend[,OPTIONS] foo.pl ОПИСАНИЕ
Этот модуль используется как фронтенд для Perl-компилятора.
Если вы передадите параметр -q модулю, то дескриптор файла STDOUT будет перенаправлен в переменную $O::BEGIN_output во время компиляции. Это означает, что любой вывод в STDOUT из блоков BEGIN или используемых модулей будет сохранен в этой переменной вместо вывода на консоль. Это полезно для тех бэкэндов, которые генерируют собственный вывод (Deparse, Concise и т. д.), чтобы их вывод не смешивался с выводом компилируемого кода.
Параметр -qq ведет себя как -q, за исключением того, что он также закрывает STDERR после завершения депарсинга. Это подавляет сообщение "Синтаксис OK", обычно выводимое perl.
КОНВЕНЦИИ
Большинство бэкэндов компилятора используют следующие соглашения: OPTIONS состоит из списка слов, разделенных запятыми (без пробелов). Параметр -v обычно переводит бэкэнд в режим подробного вывода. Параметр -ofile генерирует вывод в файл file вместо stdout. Параметр -D, за которым следуют различные буквы, включает различные внутренние флаги отладки. Обратитесь к документации нужного бэкэнда (названного B::Backend в приведенном выше примере), чтобы узнать о нем.
РЕАЛИЗАЦИЯ
Этот раздел необходим только тем, кто хочет написать модуль бэкэнда компилятора, который можно использовать с помощью этого модуля.
Команда, указанная в разделе СИНТАКСИС, соответствует Perl-коду
use O ("Backend", OPTIONS); Функция O::import загружает соответствующий модуль B::Backend и вызывает его функцию compile, передавая ей OPTIONS. Ожидается, что эта функция вернет ссылку на подпрограмму, которую мы назовем CALLBACK. Затем включается флаг "только компиляция" (эквивалентный командной строке -c) и регистрируется блок CHECK, который вызывает CALLBACK. Таким образом, основная Perl-программа, упомянутая в командной строке, считывается, парсится и компилируется в внутреннее представление синтаксического дерева. Поскольку установлен флаг -c, программа не начинает выполнение (за исключением блоков BEGIN, конечно), но вызывается функция CALLBACK, зарегистрированная бэкэндом компилятора.
Подводя итог, модуль бэкэнда компилятора должен называться "B::Foo" для некоторого foo и располагаться в соответствующем каталоге для этого имени. Он должен определять функцию под названием compile. Когда пользователь вводит
perl -MO=Foo,OPTIONS foo.pl эта функция вызывается и получает эти OPTIONS (разделенные запятыми). Она должна вернуть ссылку на подпрограмму основной функции компиляции. После загрузки и парсинга программы пользователя эта возвращённая ссылка на подпрограмму вызывается, что позволяет ей выполнить компиляцию, обычно используя функциональность модуля B.
ОШИБКИ
Параметры -q и -qq не работают правильно, если perl не скомпилирован с поддержкой PerlIO : STDOUT будет закрыт вместо перенаправления в $O::BEGIN_output.
АВТОР
Malcolm Beattie, mbeattie@sable.ox.ac.uk
© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.36.0/O