Подтвердить что ты не робот

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

Я поддерживаю некоторый код, который считывает значения по последовательному радио и распаковывает их в структуры данных Perl:

# Don't yell at me, I didn't write this
if ($command_string =~
    /^.(.)(.).(..)(.)(..)(.)(....)(....)(....)(....)
        (..)(..)(.)(.)(.)(.)(..)(..)(..)(..)(..)(..)(.)(.).......
            (.)........(.)(.).*/sx) {

    $config->{sequence}      = hex(unpack('H2', $1));
    $config->{radio_id}      = hex(unpack('H2', $2));
    ...
    $config->{radio_type}    = hex(unpack('H2', $26));
    $config->{radio_channel} = hex(unpack('H2', $27));
}

Это неуловимое захватывающее регулярное выражение заставило меня задуматься: какова верхняя граница нумерованных переменных захвата в Perl? Доходит ли он до $MAXINT?

4b9b3361

Ответ 1

Этот script работает как минимум $N=5000000. После этого у него заканчивается память.

$N = $ARGV[0] || 5000;
$q = '(.)' x $N;
$regex = qr/$q/;
("x" x $N) =~ $regex;
print eval "\$$N";