Spec-Zone.ru › Perl 5.32

O

СОДЕРЖАНИЕ

  • ИМЯ
  • СИНТАКСИС
  • ОПИСАНИЕ
  • КОНВЕНЦИИ
  • РЕАЛИЗАЦИЯ
  • ОШИБКИ
  • АВТОР

ИМЯ

O — Универсальный интерфейс к бэкендам Perl-компилятора

СИНТАКСИС

perl -MO=[-q,]Backend[,OPTIONS] foo.pl

ОПИСАНИЕ

Этот модуль используется в качестве фронтального интерфейса к Perl-компилятору.

Если вы передадите опцию -q модулю, то дескриптор файла STDOUT будет перенаправлен в переменную $O::BEGIN_output во время компиляции. Это означает, что любой вывод в STDOUT, произведённый блоками BEGIN или используемыми модулями, будет сохранён в этой переменной вместо вывода на экран. Это полезно для тех бэкендов, которые сами генерируют вывод (Deparse, Concise и т. д.), чтобы их вывод не смешивался с выводом компилируемого кода.

Опция -qq работает как -q, за исключением того, что она также закрывает STDERR после завершения разбора. Это подавляет сообщение «Синтаксис корректен», обычно генерируемое 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, конечно), но вызывается функция обратного вызова, зарегистрированная бэкендом компилятора.

Вкратце, модуль бэкенда компилятора должен называться «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.30.3/O

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API