В общем случае это невозможно, потому что у кого-то может быть вставка кода (??{....})
, которая превращается во что-то, использующее именованный захват ранее невидимого имени во время выполнения матча.
В конкретном случае вы можете копаться в базовую структуру из C API.Devel::Peek
предлагает несколько мест, где вы можете прогуляться:
% perl -MDevel::Peek -le 'Dump qr/(?<foo>\w+) (?&foo)/'
SV = IV(0x8033ac) at 0x8033b0
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x803d40
SV = REGEXP(0x8173d8) at 0x803d40
REFCNT = 1
FLAGS = (OBJECT,POK,FAKE,pPOK)
PV = 0x216fc0 "(?^:(?<foo>\\w+) (?&foo))"
CUR = 24
LEN = 0
STASH = 0x803b50 "Regexp"
EXTFLAGS = 0x600000 (USE_INTUIT_NOML,USE_INTUIT_ML)
INTFLAGS = 0x1
NPARENS = 1
LASTPAREN = 0
LASTCLOSEPAREN = 0
MINLEN = 3
MINLENRET = 3
GOFS = 0
PRE_PREFIX = 4
SEEN_EVALS = 0
SUBLEN = 0
SUBBEG = 0x0
ENGINE = 0x162b60
MOTHER_RE = 0x80fab0
PAREN_NAMES = 0x80fa40
SUBSTRS = 0x2044b0
PPRIVATE = 0x206360
OFFS = 0x204280
Например, PAREN_NAMES
выглядит многообещающе.
Но это похоже на большую работу.Для чего вы хотите это сделать?