Перейти к содержанию

Некоторые сведения о Perl 5/Приложения

Материал из Викиучебника — открытых книг для открытого мира
← Работа со строками и регулярные выражения Глава
Приложения


Специальные переменные и массивы

[править]
Переменная Псевдоним Описание Переменная Псевдоним Описание
$_
$ARG
Используется по умолчанию во всех функциях и операциях, в том числе:
  • в операциях поиска, замены и транслитерации, когда не используется операция связывания =~ или !~;
  • в качестве области ввода в конструкциях while(<>) {...};
  • в качестве параметра для функций chop, print, split и других подобных;
  • в цикле foreach, если переменная цикла не задана явно.
$nn
где n – десятичная цифра
Хранит результат раскрытия n-ой группы последнего шаблона регулярного выражения
$&
$MATCH
Часть строки, найденная при последнем удачном сопоставлении с шаблоном регулярного выражения
$`
$PREMATCH
Часть строки, стоящая до $& при последнем удачном сопоставлении с шаблоном регулярного выражения
$'
$POSTMATCH
Часть строки, стоящая после $& при последнем удачном сопоставлении с шаблоном регулярного выражения
$+
$LAST_PAREN_MATCH
Содержит результат раскрытия самой последней группы захвата последнего шаблона регулярного выражения
$*
$MULTILINE_MATCHING
Когда установлена в 0, процессор регулярных выражений всегда работает в многострочном режиме, кроме случаев, когда режим указан явно. В настоящее время считается устаревшей. Используйте вместо этой переменной модификаторы
$.
$NR
$INPUT_LINE_NUMBER
Хранит номер последней удачно прочитанной строки последней операции чтения из файла
$/
$RS
$INPUT_RECORD_SEPARATOR
Хранит разделитель записей по умолчанию для чтения из файлов. Разделитель может быть строкой. Если значение переменной неопределенное, то признаком по умолчанию считается символ конца потока EOF
$|
$OUTPUT_AUTOFLUSH
Если установлена в 0, то указывает, что вывод в файл функциями print и write всегда должен буферизироваться. Для отмены буферизации следует присвоить переменной ненулевое значение
$,
$OFS
$OUTPUT_FIELD_SEPARATOR
Разделитель полей выходных записей для функции print. По умолчанию инициирована пустой строкой, т.е. выводимые поля выводятся друг за другом, никак не разделяясь
$\
$ORS
$OUTPUT_RECORD_SEPARATOR
Разделитель, добавляемый в конец каждого вывода функции print. По умолчанию это символ перевода строки
$"
$LIST_SEPARATOR
Используется, когда функции print передается массив. Символ этой переменной будет использоваться как разделитель элементов массива. По умолчанию это пробел
$;
$SUBSEP
$SUBSCRIPT_SEPARATOR
Символ, используемый в качестве символа-разделителя при эмуляции многомерного массива. По умолчанию это символ \034. Другими словами, интерпретатор, встретив запись $arr{"i","j"}, развернет ее в $arr{"i" . $; . "j"}
$#
$OFMT
Формат по умолчанию, используемый для вывода чисел. По умолчанию равен %.20g. Не рекомендован к использованию в Perl 5 и выше
$%
$FORMAT_PAGE_NUMBER
Хранит номер страницы текущего файла вывода
$=
$FORMAT_LINES_PER_PAGE
Длина текущей страницы файла вывода. По умолчанию равен 60
$-
$FORMAT_LINES_LEFT
Число строк, оставшихся на текущей странице текущего файла вывода
$~
$FORMAT_NAME
Имя текущего формата для текущего файла вывода. По умолчанию равна дескриптору текущего файла вывода
$^
$FORMAT_TOP_NAME
Имя текущего формата заголовка страницы для текущего файла вывода. По умолчанию равняется имени дескриптора текущего файла вывода с суффиксом _TOP
$:
$FORMAT_LINE_BREAK_CHARACTERS
Текущее множество символов переноса слова. Используется в форматах для полей помеченных через ^, чтобы обозначить такие символы, до которых подсчитываются символы для переноса строк. По умолчанию переменная инициализирована тремя символами: пробелом, символом новой строки и символом тире
$^L
$FORMAT_FORMFEED
Признак переход на новую страницу, используемый в форматах. По умолчанию это символ \f
$^A
$ACCUMULATOR
Аккумулятор, используемый функцией write для временного хранения выводимых отформатированных строк
$?
$CHILD_ERROR
Используется для хранения кода возврата последней операции qx{}, операции закрытия программного канала или вызова функции system(). Хранит 16-битное число, в котором первые 8 бит хранят код возврата, а вторые 8 бит — дополнительную системную информацию
$!
$ERRNO
$OS_ERROR
Хранит значение, возвращаемое системной функцией. В числовом контексте хранит код сообщения, а в текстовом — текстовое описание
$^E
$EXTENDED_OS_ERROR
Информация о системной ошибке, специфичной для операционной системы. В большинстве ситуаций совпадает с $!
$@
$EVAL_ERROR
Сообщение об ошибке, сгенерированное в результате последнего неудачного вызова eval(). В случае успеха хранит 0
$$
$PID
$PROCESS_ID
Идентификатор процесса выполняющегося интерпретатора perl
$<
$UID
$REAL_USER_ID
Действительный идентификатор процесса интерпретатора
$>
$EUID
$EFFECTIVE_USER_ID
Эффективный идентификатор процесса интерпретатора
$(
$GID
$REAL_GROUP_ID
Действительный идентификатор группы процесса интерпретатора
$)
$EGID
$EFFECTIVE_GROUP_ID
Эффективный идентификатор группы процесса интерпретатора
$0
$PROGRAM_NAME
Имя исполняющего файла, содержащего исходный код программы Perl
$[
Указывает на то, что считать первым элементом любого массива и любой строки. По умолчанию 0
$]
$PERL_VERSION
Номер версии интерпретатора perl
$^D
$DEBUGGING
Текущее значение флагов отладки, переданных в интерпретатор опцией -D
$^F
$SYSTEM_FD_MAX
Максимальный номер дескриптора для файла системы. Обычно равен 2
$^H
Хранит информацию о том, какие проверки выполняются директивой strict
$^I
$INPLACE_EDIT
Хранит расширение резервных файлов при операции записи, если интерпретатор был вызван с опцией -i<суфффикс>
$^M
Используется, если интерпретатор был скомпилирован с опцией, позволяющей создание резервного буфера памяти
$^O
$OSNAME
Имя операционной системе, в которой данный интерпретатор был скомпилирован
$^P
$PERLDB
Хранит флаги отладчика. Если отладчик отключен, то хранит 0
$^R
Результат последнего удачного выполнения конструкции (?{<код>}), которая включает код Perl в шаблоны регулярных выражений
$^T
$BASETIME
Время запуска программы относительно начала эпохи
$^W
$WARNING
Если установлено в 0, то подавляет вывод предупреждающих сообщений, иначе разрешает. Аналогична передачи опции -w
$^X
$EXECUTABLE_NAME
Имя, по которому была вызвана выполняющая программа
$ARGV
Имя текущего файла при чтении из <> (т.е. без явного указания дескриптора)
@ARGV
Массив с аргументами, переданными программе командной оболочкой
@INC
Массив каталогов, в которых следует просматривать сценарии Perl, подлежащие выполнению в конструкциях do <имя-файла>, require или use.
@_
В процедуре/функции хранит список переданных аргументов
%INC
Хранит имена файлов, подключенных через do <имя-файла> и require. В этом хеше ключом является аргумент функции, а значением — путь к подключенному файлу
%ENV
Хранит переменные среды исполнения
%SIG
Хранит настройки для обработки сигналов, где ключом хеша является имя сигнала, а значением его обработчик
@EXPORT
Имена пакетов, экспортируемых пакетом по умолчанию
@EXPORT_OK
Имена пакетов, которые вызывающая программа может экспортировать по запросу
ARGV
Дескриптор файла, ассоциированный с текущим файлом ввода. Если файла передавались в @ARGV, то будет последовательно ассоциироваться с каждым из них при каждом новом чтении
DATA
Специальный дескриптор, ассоциированный с частью файла, после лексемы __END__.
STDIN
Дескриптор стандартного файла ввода
STDOUT
Дескриптор стандартного файла вывода
STDERR
Дескриптор стандартного файла вывода ошибок

Основные опции интерпретатора perl

[править]

Интерпретатор вызывается в общем виде так:

perl [список-опций-интерпретатора] [--] [исходный-файл-программы] [аргументы-программы]

Ниже в таблице приведены основные опции интерпретатора.

Опция Описание
-0[nnn] Задает разделитель записей файла ввода, устанавливая значение для переменной $/. Если аргумент для опции не задан, то будет присвоено значение \0, иначе код разделителя можно задать в форме восьмеричного числа nnn
-a Включает режим авторазбиения строки ввода при совместном использовании с опцией -n или -p. Результат будет помещаться в массив @F. Если разделитель не указан через опцию -F, то будет использоваться пробел как разделитель
-c Запускает интерпретатор в режиме проверки синтаксиса программы без её исполнения.
-d[:модуль] Запускает сценарий в режиме отладки под управлением модуля отладки или трассировки, установленного как Devel::модуль
-D[число/список] Устанавливает флаги отладки
-e '<код-Perl>' Позволяет передать код Perl не через исходный файл, а прямо через эту опцию. Обычно используется, когда программа состоит из небольшого числа строк. Допускается использование нескольких опций -e в одном вызове
-F /<шаблон>/ Задает шаблон регулярного выражения для вычисления разделителя при автоматической разбивке слов с помощью опции -a. По умолчанию задает пробел в качестве разделителя. В этой опции символы / можно опускать
-i[расширение] Задает режим редактирования файла по месту. Используется совместно с опциями -n или -p. Редактирование выполняется по следующей схеме: файл переименовывается путем добавление к оригинальному имени суффикса расширение (если не задано, то этот этап пропускается); открывается файл вывода с именем исходного файла и все операции print пишут в этот новый файл
-Iкаталог Задает каталог поиска сценариев Perl, выполняемых операциями do, require и use. Каждый каталог добавляется в массив @INC
-l[nnn] Включает автоматическую обработку концов строк слова. Обычно используется с опциями -n или -p для автоматического удаления завершающего символа $/. Либо используется для переопределения переменной $\. Восьмеричный код nnn задает символ разделителя. Если он не указан, то будет использоваться текущее значение переменной $/
-m[-]модуль
-M[-]модуль
-[mM][-]модуль=парам1[,парам2]...
Выполняет вызов use модуль () (-m) или use модуль (-M) до выполнения основного кода. Если указан дефис -, то use заменяется на no. Третья форма позволяет передать также параметры
-n Неявно запускает переданный код в цикле
while (<>) {
    # ... переданный код
}

Обычно эта опция используется, когда программе передаются в аргументах файлы, которые нужно по очереди обработать одинаковым образом. Эта опция эмулирует sed -n и awk

-p Аналогичен -n, но добавляет печать каждой обрабатываемой строки, как в sed:
while (<>) {
   # ... переданный код
} continue {
   print or die "-p destination: $!\n";
}
-P Перед компиляцией сценарий Perl обрабатывается препроцессором Си, что позволяет в исходном коде использовать директивы #include, #define, #if, #else и другие. Если задана опция -I, то файлы будут просматриваться в этой директории для директивы #include
-s Включает режим синтаксического анализа вызова командной строки на наличие после имени файла с исходным кодом Perl (до списка с именами файлов) пользовательских опций (т.е. строк, начинающихся на дефис). Такие опции автоматически извлекаются из массива @ARGV, оставляя в нем только список файлов, и помещаются в одноименные переменные
-S Поиск файла программы Perl осуществляется с помощью переменной окружения PATH
-T Включает режим проверки на безопасность полученных извне данных в операциях с файловой системой
-u Создание дампа ядра после компиляции сценария Perl. Последующее использование undump позволяет создать двоичный выполняемый файл сценария
-U Разрешает выполнение небезопасных операций
-v Отображает номер версии интерпретатора perl
-V[:переменная] Отображает информацию о конфигурации интерпретатора perl. Если задано имя переменной среды, отображает её текущее значение
-w Включает режим отображения предупреждений во время компиляции программы Perl
-x[каталог] Извлекает и выполняет программу Perl, расположенную в текстовом файле в произвольном месте между шебангом и лексемой __END__. Если задан каталог, то перед исполнением сценария он становится текущим

Отладка

[править]

Запуск интерпретатора в режиме отладки

[править]

В этом разделе мы рассмотрим стандартный консольный отладчик perl. В дистрибутивной поставке ActiveState отладчик поставляется в более удобном виде с графическим интерфейсом.

Для запуска отладчика нужно передать интерпретатору опцию -d:

$ perl -d ./source.pl

Пусть у нас есть такая программа

# Файл: source.pl
use strict;

our $global_var = 5;
our $global_var_1 = 7;

{
    local $global_var = 6;
    my $my = 10;
    my @arr = ( local $global_var_1, '5' );
}

sub procedure {
    foreach my $el ('four', 'five', 'six') {
        print "$el", "\n";
    } 
}

sub procedure1 {
    foreach my $el (@_) {
        print "$el", "\n";
    }
}

foreach my $el ('one', 'two', 'three') {
    print "$el", "\n";
}

procedure();

procedure1 '1', '2', '3';

тогда запуск программы с отладчиком будет выглядеть так

$ perl -d ./source.pl

Loading DB routines from perl5db.pl version 1.60
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(./source.pl:5):  our $global_var = 5;
  DB<1>

Если не заданы точки останова, то отладчик остановится на первом операторе программы, которым является в этом примере our $global_var = 5;. Отладчик выводит приглашение для ввода команд. Для получения быстрой справки по командам используйте однобуквенную команду h [<команда>]. Чтобы выйти из отладчика и завершить программу, используйте команду q или сочетание Ctrl + D.

Ввод пустой команды дублирует ввод последней команды.

Консольный отладчик достаточно прост. Для уверенного использования вам нужно выучить несколько ходовых команд.

Команда Описание
l [<аргумент>] Выводит исходный код программы. Без аргумента выводит 10 строк исходного файла, начиная с точки, где сейчас остановилось исполнение. Каждый последующий вызов без аргументов будет выводить следующие 10 строк, пока исходный код не кончится. Чтобы поменять точку отсчета для вывода, используйте l <номер-строки>, тогда будет выведена эта строка и сменится точка отсчета. Чтобы вывести текст программы с произвольной точки, используйте l <номер-строки>+<сколько-строк-вывести-еще>; l <начальная-строка>-<конечная-строка> – печать диапазона строк; l <имя-процедуры> – печать начальной части процедуры.

Вместо номеров можно вводить идентификаторы, тогда отладчик будет выводить первое вхождение этого объекта в программе и еще несколько строк после него.

- Печать предыдущего блока из 10 строк
s [<выражение>] Без аргумента сдвигает точку исполнения на следующий оператор и отображает оператор, который будет исполнен следующим. Если следующий оператор требует входа в модуль или процедуру, то команда продолжит трассировку с заходом внутрь
n [<выражение>] Работает аналогично s, но без захода внутрь процедур
r Внутри процедуры продолжает исполнение до выхода из неё и перемещает точку следования на следующий оператор за её вызовом
c [<строка>|<процедура>] Без аргументов продолжает исполнение программы до следующей точки останова или до конца программы, если ни одной точки не было встречено. Указав аргумент, можно продолжить исполнение до конкретного места: строки или процедуры

Ниже показан небольшой сеанс отладки. Обратите внимание, что переходить можно только на точки следования, т.е. строки, в которых рядом с номерами стоит символ двоеточия :.

main::(./source.pl:5):  our $global_var = 5;
  DB<1> s  # идем дальше
main::(./source.pl:6):  our $global_var_1 = 7;
  DB<1> l  # выводим следующие 10 строк
6==>    our $global_var_1 = 7;   # текущая точка исполнения помечается стрелкой
7
8       {
9:          local $global_var = 6;
10:         my $my = 10;
11:         my @arr = ( local $global_var_1, '5' );
12      }
13
14      sub procedure {
15:         foreach my $el ('four', 'five', 'six') {
  DB<2> c 10   # продолжаем исполнение до 10-й строки
main::(./source.pl:10):     my $my = 10;
  DB<3> l      # печатаем еще 10 строк
10==>       my $my = 10;
11:         my @arr = ( local $global_var_1, '5' );
12      }
13
14      sub procedure {
15:         foreach my $el ('four', 'five', 'six') {
16:             print "$el", "\n";
17          }
18      }
19
  DB<4> c procedure  # продолжаем исполнение до вызова процедуры procedure
one
two
three
main::procedure(./source.pl:15):            foreach my $el ('four', 'five', 'six') {
  DB<5> r   #  выходим из процедуры
four
five
six
void context return from main::procedure
main::(./source.pl:32): procedure1 '1', '2', '3';  # Обратите внимание, что следующая точка следования переместилась на оператор 32 строки
  DB<6> n   # выполняем код второй процедуры без захода в неё
1
2
3
Debugged program terminated.  Use q to quit or R to restart,    # Программа кончилась и отладка завершилась
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.

Исследование данных программы

[править]

Для печати значений переменных служат две команды:

V [<пакет> [<список-переменных>]]

# Аналогична 'V', но печатает переменные текущего пакета
X [<список-переменных>]

Без аргументов обе команды распечатают все переменные. При печати переменных помните, что команде нужно передавать имя переменной без префикса типа. Если в программе существует несколько одноименных переменных разных типов, то все они будут напечатаны.

Еще одной полезной функцией является режим трассировки переменных, который автоматически печатает переменные в момент, когда они меняют значение. Режим трассировки включается и отключается командой t. По умолчанию он выключен.

Ниже показан фрагмент сеанса отладки.

$ perl -d ./source.pl

Loading DB routines from perl5db.pl version 1.60
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(./source.pl:5):  our $global_var = 5;
  DB<1> c 6
main::(./source.pl:6):  our $global_var_1 = 7;
  DB<2> X global_var
$global_var = 5
  DB<3> V main global_var
$global_var = 5
  DB<4> s
main::(./source.pl:9):      local $global_var = 6;
  DB<5> X ~global+    # Можно использовать регулярные выражения, если начать с символа ~ или ! (для негативной проверки)
$global_var = 5
$global_var_1 = 7
  DB<6> t             # Включаем трассировку переменных
Trace = on
  DB<7> c
main::(./source.pl:9):      local $global_var = 6;
main::(./source.pl:10):     my $my = 10;
main::(./source.pl:11):     my @arr = ( local $global_var_1, '5' );
main::(./source.pl:26): foreach my $el ('one', 'two', 'three') {
main::(./source.pl:27):     print "$el", "\n";
one
main::(./source.pl:27):     print "$el", "\n";
two
main::(./source.pl:27):     print "$el", "\n";
three
main::(./source.pl:30): procedure();
main::procedure(./source.pl:15):            foreach my $el ('four', 'five', 'six') {
main::procedure(./source.pl:16):                print "$el", "\n";
four
main::procedure(./source.pl:16):                print "$el", "\n";
five
main::procedure(./source.pl:16):                print "$el", "\n";
six
main::(./source.pl:32): procedure1 '1', '2', '3';
main::procedure1(./source.pl:21):           foreach my $el (@_) {
main::procedure1(./source.pl:22):               print "$el", "\n";
1
main::procedure1(./source.pl:22):               print "$el", "\n";
2
main::procedure1(./source.pl:22):               print "$el", "\n";
3
Debugged program terminated.  Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.

Расстановка точек останова

[править]

Точки останова позволяют определить точки следования, в которых программа должна останавливаться при наступлении некоторых условий. В простейшем случае исполнение останавливается в момент перехода на точку следования, на которой установлен останов.

Для создания точки останова используется команда

b                      # Создает точку останова в текущей точке следования
b <номер>              # Создает точку останова в указанной точке следования
b <номер> <условие>    # Создает точку останова в указанной точке при наступлении условия
b <имя-процедуры>      # Устанавливает точку останова на вызов процедуры
$ perl -d ./source.pl

Loading DB routines from perl5db.pl version 1.60
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(./source.pl:5):  our $global_var = 5;
  DB<1> b 10
  DB<2> b procedure
  DB<3> c
main::(./source.pl:10):     my $my = 10;
  DB<3> c
one
two
three
main::procedure(./source.pl:15):            foreach my $el ('four', 'five', 'six') {
  DB<3> c
four
five
six
1
2
3
Debugged program terminated.  Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.

Другие команды отладчика

[править]
Команда Описание
T Отображается содержимое стека вызванных процедур
w [<строка>] Отображает блок строк вокруг заданной строки
. Возврат к выполненной строке
f <файл> Переключение на просмотр файла. Файл должен быть загружен
/<шаблон>/ Поиск строки по шаблону регулярного выражения; вперед от текущей точки. Завершающий разделитель может быть опущен
?<образец>? Поиск строки по шаблону регулярного выражения; направление назад от текущей точки. Завершающий разделитель может быть опущен
L Отображение всех установленных точек останова
S [[!]<шаблон>] Вывод процедур, соответствующих или не соответствующих образцу
t Включение/отключение режима трассировки
b [<строка>] [<условие>]
b <процедура> [<условие>]
b load <файл>
b postpone <процедура> [<условие>]
b compile <процедура>
Управление точками останова. Отдельно следует рассмотреть следующие точки останова:
  • load — устанавливает точку останова на операторе require <файл>;;
  • postpone — установка точки останова в первой строке процедуры после её компиляции;
  • compile — остановка после компиляции процедуры.
d [<строка>] Удаление точки останова с указанной строки
D Удаление всех точек останова
a [<строка>] <команда> Установка действий перед выполнением операторов строки
A Удаление всех действий
W <выражение> Добавление глобального наблюдаемого выражения
W Удаление всех глобальных наблюдаемых выражений
x <выражение> Вычисляет выражение в списковом контексте и отображает его значение
m <выражение> Вычисляет выражение в списковом выражении, отображает методы, вызывавшиеся при вычислении первого элемента результата
m <класс> Отображает вызываемые методы указанного класса
O [<опция>[=<значение>]]
O [<опция>"<значение>"]
O [<опция>?...]
Устанавливает или запрашивает значения опций отладчика. Эти опции влияют на поведение отладчика и режимы работы некоторых команд. Опций достаточно много, поэтому рекомендуется обращаться к справочной документации по отладчику
< <выражение> Определение команды Perl, которая должна выполняться перед каждым приглашением отладчика ввести команду
<< <выражение> Добавление команды в список команд Perl, которые должны выполняться перед каждым приглашением отладчика ввести команду
> <выражение> Определение команды Perl, которая должна выполняться после каждого приглашения отладчика ввести команду
>> <выражение> Добавление команды в список команд Perl, которые должны выполняться после каждого приглашения отладчика ввести команду
{ <команда> Определение команды отладчика, которая должны выполняться перед каждым его выполнением ввести команду
{{ <команда> Добавление команды отладчика в список команд, которые должны выполняться перед каждым его приглашением ввести команду
! <номер> Выполнение предыдущей команды отладчика. Номер задает от первой выполненной команды
! -<номер> Выполнение предыдущей команды отладчика. Номер задает отсчет от последней выполненной команды
! <шаблон> Выполнение команды, которая начиналась со строки, удовлетворяющей регулярному выражению
!! <команда> Выполнение команды в подпроцессе
H -<число> Отображение последних выполненных команд. Без аргумента выводит все команды
p <выражение> Эквивалентна команде print {DB::OUT} <выражение> в текущем пакете
|<команда> Выполнение команды отладчика, направляя DB::OUT на текущий пейджер
||<команда> Аналогична предыдущей команде, но только DB::OUT временно становится текщим
= [<псевдоним> <значение>] Определяет псевдоним команды или отображает список текущих псевдонимов, если вызывается без аргументов
<команда> Выполнение оператора Perl в текущем пакете
v Отображает версии загруженных модулей
R Перезагрузка отладчика, при этом некоторые его установки могут быть сброшены. Сохраняется история команд, точки останова и действия, установки отладчика командой O и опции команд -w, -I, -e
h [<команда>] Получение общей справки или справки о команде
h h Отображение всех команд отладчика

Отладка регулярных выражений

[править]

Для отладки регулярных выражений удобно использовать директиву

use re 'debug';

которая включает отладочную печать в момент компиляции регулярного выражения и в момент получения конечного результата по регулярному выражению. С помощью этой директивы вы увидите микропрограмму регулярного выражения и все этапы её исполнения. Например

use re 'debug';

"aaabbbaaa" =~ /[b]+/;

no re;  # Изолируем проверяемое регулярное выражение

В результате будет напечатано следующее

Compiling REx "[b]+"
Final program:
   1: PLUS (4)
   2:   EXACT <b> (0)
   4: END (0)
anchored "b" at 0..0 (checking anchored) plus minlen 1
Matching REx "[b]+" against "aaabbbaaa"
Intuit: trying to determine minimum start position...
  doing 'check' fbm scan, [0..9] gave 3
  Found anchored substr "b" at offset 3 (rx_origin now 3)...
  (multiline anchor test skipped)
  try at offset...
Intuit: Successfully guessed: match at offset 3
   3 <aaa> <bbbaaa>          |   0| 1:PLUS(4)
                             |   0| EXACT <b> can match 3 times out of 2147483647...
   6 <aaabbb> <aaa>          |   1|  4:END(0)
Match successful!
Freeing REx: "[b]+"

В верхней части вы можете видеть скомпилированную программу, выполняющую данное выражение. Внизу вы видите полную печать о том, как выполнялось регулярное выражение и как программа пришла к такому результату.

Данное выражение очень простое, но вообще отладчик иногда выводит технологическую информацию по оптимизации. Для рядового пользователя интерес в первую очередь представляют шаги исполнения программы. Вы можете видеть, что для сопоставления шагов с частями программы регулярного выражения используются специальные идентификаторы, например, EXACT, который означает процедуру поиска строки, передаваемой вторым аргументом.

Подробно о том, как читать печать этой директивы, вы сможете найти на странице документации perldebguts.

Библиотечные модули Perl

[править]

В этом разделе приведен список базовых модулей дистрибутивного пакета Perl, начиная с версии 5.6.

Директивные модули

[править]
Модуль Описание
attributes Чтение/запись атрибутов подпрограмм и переменных
attrs Чтение/запись атрибутов подпрограмм (устаревший)
autouse Откладывает загрузку модуля до обращения к его функциям
base Устанавливает IS-A-связь с базовым классом на этапе компиляции
blib Позволяет обращаться к еще не инсталированным пакетам
bytes Включает байтовое представление символов
charnames Escape-последовательности для символов Unicode вида \N{имя}
constant Декларация констант
diagnostics Включает подробную диагностику предупреждений
fields Создает поля класса на этапе компиляции
filetest Управляет поведением функций, возвращающих атрибуты файлов
integer Целочисленная арифметика вместо плавающей
less Директивы компилятора
lib Изменяет специальный массив @INC на этапе компиляции
locale Включает/выключает национальную поддержку символов
open Правила ввода-вывода по умолчанию
ops Запрещает небезопасные операции при компиляции
overload Переопределение операций языка
re Управляет поведением регулярных выражений
sigtrap Добавляет обработку сигналов
strict Запрещает небезопасные конструкции языка
subs Декларация имен подпрограмм
utf8 Включает кодировку символов UTF-8
vars Декларация имен глобальных переменных (устаревшая)
warnings Управляет выводом предупреждений

Базовые модули

[править]
Модуль Описание
AnyDBM_File Базовый модуль для библиотек управления базами данных
AutoLoader Загрузка подпрограмм только по требованию
AutoSplit Разбивает пакет на фрагменты для автозагрузки
B Внутренняя реализация компилятора PERL
B::Asmdata Таблицы генерации исполняемого байт-кода
B::Assembler Транслятор байт-кода
B::Block Прохождение базовых блоков исполняемого кода
B::Bytecode Компилятор PERLа в байт-код
B::C Компилятор PERLа в C
B::CC Оптимизирующий компилятор PERLа в C
B::Debug Прохождение синтаксического дерева программы с выводом отладочной информации
B::Deparse Дискомпилятор байт-кода в PERL
B::Disassembler Дизассемблер исполняемого кода
B::Lint Модуль поиска подозрительных конструкций в PERL-программах
B::Showlex Выводит имена лексических переменных в функциях и файлах
B::Stackobj Вспомогательный модуль для B:CC
B::Stash Вспомогательный модуль для компиляции PERL-программ в загрузочные модули
B::Terse Прохождение синтаксического дерева программы с выводом краткой информации
B::Xref Генератор таблиц перекрестных ссылок для PERL-программ
Benchmark Подсчет времени выполнения того или иного фрагмента кода
ByteLoader Загрузчик скомпилированного байт-кода
Carp Вывод предупреждений и сообщений о фатальных ошибках
Carp::Heavy Внутренняя реализация Carp
CGI Реализация интерфейса CGI
CGI::Apache Модуль совместимости CGI с Веб-сервером Apache
CGI::Carp CGI-программы вывода серверного протокола ошибок HTTP
CGI::Cookie Модуль работы с куки
CGI::Fast Модуль совместимости CGI с Веб-сервером в стандарте Open Market FastCGI
CGI::Pretty Модуль форматирования HTML-документов
CGI::Push Модуль создания Веб-страниц, динамически обновляемых сервером (server push)
CGI::Switch Устаревший модуль, больше не используется
Config Настройка конфигурации perl'а
CPAN Загрузка, компиляция и инсталяция модулей из CPAN
CPAN::FirstTime Настройка конфигурации CPAN
CPAN::Nox CPAN, не использующий скомпилированных расширений
Class::Struct Создание классов, подобных структурам C
Cwd Чтение/смена текущего каталога
Data::Dumper Дамп структур данных
DB Интерфейс к отладочным API (экспериментальный)
DB_File Модуль связи с библиотекой доступа к базам данных Berkeley DB 1.x
Devel::DProf Профиль исполнения PERL-программ
Devel::Peek Средства отладки загрузочных модулей
Devel::SelfStubber Генератор заглушек для SelfLoader
DirHanlde Методы работы с каталогами
Dumpvalue Экранный дамп данных
DynaLoader Динамическая загрузка библиотек C
English Мнемонические имена для специальных переменных
Env Доступ к переменным окружения как к регулярным выражениям
Errno Константы, связанные с номерами ошибок, из файла errno.h
Exporter Реализация импорта для модулей
Exporter::Heavy Внутренняя реализация Exporter
ExtUtils::Command Утилиты, заменяющие команды Unix в других ОС
ExtUtils::Embed Утилиты для вызова PERLа из программ на C/C++
ExtUtils::Install Инсталяция модулей PERL
ExtUtils::Installed Управление инсталированными модулями
ExtUtils::Liblist Определяет, какие библиотеки C использовать и как
ExtUtils::MakeMaker Генератор makefile'ов для компиляции и инсталяции модулей
ExtUtils::Manifest Генератор файлов-манифестов
ExtUtils::Miniperl Внутренний модуль ExtUtils::MakeMaker
ExtUtils::Mkbootstrap Генератор файла загрузки для DynaLoader
ExtUtils::Mksymlists Генератор файлов управления компоновкой динамических расширений
ExtUtils::MM_Cygwin Настройка ExtUtils::MakeMaker для библиотеки Cygwin
ExtUtils::MM_OS2 Настройка ExtUtils::MakeMaker для OS/2
ExtUtils::MM_Unix Настройка ExtUtils::MakeMaker для Unix
ExtUtils::MM_Win32 Настройка ExtUtils::MakeMaker для Windows
ExtUtils::Packlist Управление файлами .packlist
ExtUtils::testlib Модуль для тестирования библиотек-расширений
Fatal Генератор фатальных ошибок при неудачном завершении функций PERLа
Fcntl Константы, связанные с управлением файлами, из файла fcntl.h
File::Basename Разбивка спецификации файла на составные части
File::CheckTree Различные проверки файлов в дереве каталогов
File::Compare Сравнение файлов или указателей файлов
File::Copy Копирование файлов или указателей файлов
File::DosGlob Работа с именами файлов DOS, содержащими подстановочные знаки
File::Find Поиск файлов по дереву каталогов
File::Glob Работа с именами файлов FreeBSD, содержащими подстановочные знаки
File::Path Создание/удаление групп каталогов
File::Spec Системно-независимые операции со спецификациями файлов
File::Spec::Functions Системно-независимые операции со спецификациями файлов
File::Spec::Mac Операции со спецификациями файлов для MacOS
File::Spec::OS2 Операции со спецификациями файлов для OS/2
File::Spec::Unix Операции со спецификациями файлов для Unix
File::Spec::VMS Операции со спецификациями файлов для VMS
File::Spec::Win32 Операции со спецификациями файлов для Windows
File::stat Доступ к атрибутам файлов по именам
FileCache Позволяет открыть больше файлов, чем разрешено системой
FileHandle Методы работы с файлами
FindBin Возвращает путь к исполняемым файлам perl
GBDM_File Модуль связи с библиотекой доступа к базам данных gdbm
Getopt::Long Расширенная обработка командных строк
Getopt::Std Обработка односимвольных опций в командных строках
I18N::Collate Сравнение строк в национальной кодировке. Устарел
IO Модуль, загружающий остальные модули ввода-вывода
IO::Dir Объектные методы работы с каталогами
IO::File Объектные методы работы с файлами
IO::Handle Внутренний модуль ввода-вывода
IO::Pipe Объектные методы коммуникации между процессами
IO::Poll Объектные методы системных опросов
IO::Seekable Методы позиционирования в файлах
IO::Select Методы управления вводом-выводом
IO::Socket Обектный интерфейс для работы с сокетами
IO::Socket::INET Обектный интерфейс для работы с сокетами TCP и UDP
IO::Socket::UNIX Обектный интерфейс для работы с сокетами Unix
IPC::Msg Межпроцессные сообщения в System V IPC
IPC::Open2 Открытие процесса для чтения и записи
IPC::Open3 Открытие процесса для чтения, записи и обработки ошибок
IPC::Semaphore Семафоры в System V IPC
IPC::SysV Константы System V IPC
Math::BigFloat Модуль работы с плавающими числами любого размера
Math::BigInt Модуль работы с целыми числами любого размера
Math::Complex Модуль работы с комплексными числами
Math::Trig Тригонометрические функции
Net::hostent Доступ по имени к свойствам результата функций gethost*()
Net::netent Доступ по имени к свойствам результата функций getnet*()
Net::Ping Проверяет доступность удаленного хоста операцией ping
Net::protoent Доступ по имени к свойствам результата функций getproto*()
Net::servent Доступ по имени к свойствам результата функций getserv*()
NBDM_File Модуль связи с ndbm-файлами
O Доступ к компилятору PERL
OBDM_File Модуль связи с odbm-файлами
Opcode Внутренний модуль компилятора PERL
POSIX Доступ к именам, определенным стандартом POSIX 1003.1 для библиотек C
Pod::Checker Проверка pod-документов на синтаксические ошибки
Pod::Find Поиск pod-файлов в дереве каталогов
Pod::Html Конвертор pod-документов в формат HTML
Pod::InputObjects Внутренний модуль для Pod::Parser
Pod::Man Конвертор pod-документов в формат ввода для *roff
Pod::Parser Базовый класс для фильтров и трансляторов POD
Pod::ParseUtils Внутренний модуль для Pod::Parser
Pod::Plainer Конвертор pod-документов в старый формат POD
Pod::Select Извлечение отдельных секций POD
Pod::Text Конвертор pod-документов в текстовый формат
Pod::Text::Color Конвертор pod-документов в текстовый формат с выделением цветом
Pod::Text::Termcap Конвертор pod-документов в текстовый формат с выделением управляющими кодами терминала
Pod::Usage Вывод сообщения на консоль
Safe Компиляция и исполнение программы при определенных ограничениях
SBDM_File Модуль связи с sdbm-файлами
Search::Dict Поиск ключа в файле словаря
SelectSaver Сохранение/восстановление указателя файла
SelfLoader Загрузка функций только по требованию
Shell Запуск системного процессора команд из PERL-программ
Socket Константы, связанные с сокетами, из файла socket.h
Symbol Манипулирование символами PERL и их именами
Term::ANSIColor Управление цветами терминала
Term::Cap Управление терминалом
Term::Complete Автодополнение слов, выводимых на терминал
Term::ReadLine Интерфейс для ввода строк с консоли
Test Оболочка для создания тестовых сценариев
Test::Harness Прогон стандартных тестов с выводом статистики
Text::Abbrev Создание таблицы сокращений для списка
Text::ParseWords Разбивка текста на слова
Text::Soundex Индексация английских слов упрощенными фонетическими ключами
Text::Tabs Преобразование табуляций в пробелы и обратно
Text::Wrap Автоматический разрыв длинных строк
Thread Модуль управления потоками Windows (экспериментальный)
Thread::Queue Реализация очередей для многопоточной среды
Thread::Semaphore Реализация семафоров для многопоточной среды
Thread::Signal Создание отдельного потока для обработки сигналов
Thread::Specific Создание уникальных ключей для потоков
Tie::Array Базовый класс для связанных массивов
Tie::Handle Базовый класс для связанных описателей файлов
Tie::Hash Базовый класс для связанных ассоциативных массивов
Tie::RefHash Использование ссылок в качестве ключей ассоциативных массивов
Tie::Scalar Базовый класс для связанных скаляров
Tie::SubstrHash Ассоциативные массивы с ключами и записями постоянной длины
Time::gmtime Доступ по имени к свойствам результата функции gmtime()
Time::Local Преобразование даты и времени в количество миллисекунд
Time::localtime Доступ по имени к свойствам результата функции localtime()
Time::tm Внутренний модуль для Time::gmtime и Time::localtime
UNIVERSAL Базовый класс для управления ссылками на объекты
User::grent Доступ по имени к свойствам результата функций getgr*()
User::pwent Доступ по имени к свойствам результата функций getpw*()
XSLoader Динамическая загрузка библиотек C



← Работа со строками и регулярные выражения