О
СОДЕРЖАНИЕ
ИМЯ
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 в примере выше), чтобы узнать об этом бэкенде.
РЕАЛИЗАЦИЯ
Этот раздел необходим только тем, кто хочет написать модуль бэкенда компилятора, который может использоваться с помощью этого модуля.
Команда, упомянутая в разделе SYNOPSIS, соответствует следующему коду 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–2020 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.28.3/O