
Оптимизация perl кода. Часть 2
Компилятор perl'a состоит из модулей O:: (API) и B:: (реализации). На самом деле модули API, тоже находятся в namespac'e B::, поэтому, чтобы получить по ним документацию надо писать perldoc B::ModuleName. Ниже приведены примеры использования этих модулей. perldb - это перл скомпилированный с -DDEBUGGING (см. http://dsn74.livejournal.com/14749.html).
perldb -MO=Lint program_name
выводит предупреждения о всех возможных сомнительных местах в программе. Даже те, которые не показываются при perl -w, use strict и use warning.
perldb -MO=Xref program_name
генерирует список всех функций, переменных и модулей, в том числе из библиотек. Например:
Subroutine (main) Package (lexical) $FILE i16, 34 $c i26, 29, 29 $f i10, &16, 13, 16, 16
i[номер строки] - первое использование или определение
s[номер строки] - определение функции
&[номер строки] - вызов функции
подробности в perldoc B::Xref
perldb -MO=Deparse,-p program_name
Напечатает код программы в оптимизированном виде так, как интерпретатор будет его выполнять. Ключ -p - показывать скобки.
perldb -MO=Concise program_name
Показывает opcode - промежуточный код, что-то вроде внутреннего перловского ассемблера или JVM.