Z man perlre
: ""perlre długość granica
przycisk "*" kwantyfikator jest równoważne "{0}", znak "+" do kwantyfikatora "{1}" i kwantyfikator do "{0,1}". Wartości n i m są ograniczone do wartości integralnych mniejszych od ustalonego limitu zdefiniowanego podczas budowania perla. Zazwyczaj jest to 32766 na najpopularniejszych platformach. Rzeczywista granica może być postrzegane w komunikacie o błędzie wygenerowanym kodem takich jak to:
$_ **= $_ ,/{$_}/for 2 .. 42;
Ay, że jest brzydka - nie jest jakiś stały mogę zamiast tego?
Edytuj: Jak zauważył daxim (i perlretut wskazówki) może być tak, że 32767 jest magiczną, zakodowaną na stałe liczbą. Trochę searching w kodzie Perl przechodzi długą drogę, ale nie jestem pewien, w jaki sposób dostać się do następnego etapu i rzeczywiście dowiedzieć się, gdzie domyślnym reg_infty lub REG_INFTY jest właściwie ustawiony:
~/dev/perl-5.12.2
$ grep -ri 'reg_infty.*=' *
regexec.c: if (max != REG_INFTY && ST.count == max)
t/re/pat.t: $::reg_infty = $Config {reg_infty} // 32767;
t/re/pat.t: $::reg_infty_m = $::reg_infty - 1;
t/re/pat.t: $::reg_infty_p = $::reg_infty + 1;
t/re/pat.t: $::reg_infty_m = $::reg_infty_m; # Surpress warning.
Edit 2: DVK ma oczywiście rację: jest to define
d w czasie kompilacji i prawdopodobnie można go zastąpić tylko REG_INFTY
.
także zobaczyć http://perl.plover.com/yak/regex/samples/slide050.html – daxim
@daxim: myślę masz tam pełną odpowiedź, a nie tylko komentarz. "Nawet gdybyś znał limit, nie byłby to przydatny numer, ponieważ silnik regex prawdopodobnie umrze, zanim osiągnie teoretyczny limit". –