Отладочная информация регулярных выражений
Если применить директиву
use re qw(debug);
то Perl будет выдавать подробную отладочную информацию по работе регулярных выражений. Иногда в ней можно найти что-то полезное (скажем, какие методы оптимизации используются или в чем была ваша ошибка). Например, имеем такую программку
use re qw(debug);
'abcd' =~ /abc(d)/;
На печать будет выдано:
Compiling REx `abc(d)' size 9 Got 76 bytes for offset annotations. first at 1 1: EXACT <abc>(3) 3: OPEN1(5) 5: EXACT <d>(7) 7: CLOSE1(9) 9: END(0) anchored `abcd' at 0 (checking anchored) minlen 4 Offsets: [9] 1[3] 0[0] 4[1] 0[0] 5[1] 0[0] 6[1] 0[0] 7[0] Guessing start of match, REx `abc(d)' against `abcd'... Found anchored substr `abcd' at offset 0... Guessed: match at offset 0 Matching REx `abc(d)' against `abcd' Setting an EVAL scope, savestack=3 0 <> <abcd> | 1: EXACT <abc> 3 <abc> <d> | 3: OPEN1 3 <abc> <d> | 5: EXACT <d> 4 <abcd> <v | 7: CLOSE1 4 <abcd> <> | 9: END Match successful! Freeing REx: `"abc(d)"'
Текст
1: EXACT <abc>(3) 3: OPEN1(5) 5: EXACT <d>(7) 7: CLOSE1(9) 9: END(0)
является расшифровкой внутреннего представления регулярного выражения. Например, строка
1: EXACT <abc>(3)
означает, что надо искать строковый литерал abc длиной 3 символа. Строка
anchored `abcd' at 0 (checking anchored) minlen 4
означает, что текст abcd длины 4 привязан к началу регулярного выраения и должен встретиться при любом совпадении. Поэтому, если целевой текст окажется короче этого текста, то Perl не станет применять регулярное выражение, оператор поиска без применения сразу возвратит неудачу. Строка
3: OPEN1(5)
означает, что открылась первая захватывающая скобка, 5 означает номер следующей исполняемой строки псевдокода.