Некоторые сведения о Perl 5/Приложения
← Работа со строками и регулярные выражения | Глава | |
Приложения | ||
Специальные переменные и массивы
[править]Переменная | Псевдоним | Описание | Переменная | Псевдоним | Описание |
---|---|---|---|---|---|
$_ |
$ARG |
Используется по умолчанию во всех функциях и операциях, в том числе:
|
$nn |
|
Хранит результат раскрытия 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 (<>) {
# ... переданный код
}
Обычно эта опция используется, когда программе передаются в аргументах файлы, которые нужно по очереди обработать одинаковым образом. Эта опция эмулирует |
-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 <процедура>
|
Управление точками останова. Отдельно следует рассмотреть следующие точки останова:
|
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 |
← Работа со строками и регулярные выражения |