File Coverage

blib/lib/Regexp/Common/Apache2.pm
Criterion Covered Total %
statement 117 138 84.7
branch 0 12 0.0
condition n/a
subroutine 12 22 54.5
pod n/a
total 129 172 75.0


line stmt bran cond sub pod time code
1             ##----------------------------------------------------------------------------
2             ## Module Generic - ~/scripts/Apache2.pm
3             ## Version v0.1.1
4             ## Copyright(c) 2021 DEGUEST Pte. Ltd.
5             ## Author: Jacques Deguest
6             ## Created 2021/02/14
7             ## Modified 2021/02/17
8             ## All rights reserved
9             ##
10             ## This program is free software; you can redistribute it and/or modify it
11             ## under the same terms as Perl itself.
12             ##----------------------------------------------------------------------------
13             package Regexp::Common::Apache2;
14             BEGIN
15             {
16 20     20   1909818 use strict;
  20         86  
  20         672  
17 20     20   90 use warnings;
  20         26  
  20         510  
18 20     20   83 use warnings::register;
  20         25  
  20         1889  
19 20     20   9240 use parent qw( Exporter );
  20         5477  
  20         83  
20 20     20   1543 use Regexp::Common qw( pattern );
  20         4493  
  20         163  
21 20     20   2745408 our $VERSION = 'v0.1.1';
22 20         48 our $DEBUG = 1;
23 20         30 our $indent;
24             ## Ref:
25 20         106 our $UNARY_OP = qr/\-[a-zA-Z]/;
26 20         50 our $DIGIT = qr/[0-9]/;
27 20         43 our $REGPATTERN = qr/(?>\\[[:cntrl:]\/]|[^[:cntrl:]\/])*+/;
28 20         50 our $REGFLAGS = qr/[i|s|m|g]+/;
29 20         36 our $REGSEP = qr/[\/\#\$\%\^\|\?\!\'\"\,\;\:\.\_\-]/;
30 20         38 our $FUNCNAME = qr/[a-zA-Z_]\w*/;
31 20         70 our $VARNAME = qr/[a-zA-Z_]\w*/;
32 20         57 our $TEXT = qr/[^[:cntrl:]]/;
33 20         28 our $ap_true = do{ bless( \( my $dummy = 1 ) => "Regexp::Common::Apache2::Boolean" ) };
  20         143  
34 20         35 our $ap_false = do{ bless( \( my $dummy = 0 ) => "Regexp::Common::Apache2::Boolean" ) };
  20         33  
35 20         50 our @EXPORT_OK = qw( $ap_true $ap_false );
36 20         55 our $REGEXP = {};
37 20         49 our $TRUNK = {};
38             ## Legacy regular expression
39             ##
40 20         201583 our $REGEXP_LEGACY = {};
41             };
42              
43             INIT
44             {
45 20     20   4226 $REGEXP =
46             {
47             unary_op => $UNARY_OP,
48             ##
49             digit => $DIGIT,
50             ## 1*(DIGIT)
51             digits => qr/${DIGIT}{1,}/,
52             ## "$" DIGIT
53             ## As per Apache apr_expr documentation, regular expression back reference go from 1 to 9 with 0 containing the entire regexp
54             rebackref => qr/\$${DIGIT}/,
55             ## cstring ; except enclosing regsep
56             regpattern => $REGPATTERN,
57             ## 1*("i" | "s" | "m" | "g")
58             regflags => $REGFLAGS,
59             ## "/" | "#" | "$" | "%" | "^" | "|" | "?" | "!" | "'" | '"' | "," | ";" | ":" | "." | "_" | "-"
60             regsep => $REGSEP,
61             ## "/" regpattern "/" [regflags]
62             ## | "m" regsep regpattern regsep [regflags]
63             regex => qr/
64             (?
65             (?:\/(?${REGPATTERN})\/(?${REGFLAGS})?)
66             |
67             (?:m(?${REGSEP})(?(?>\\\g{regsep}|(?!\g{regsep}).)*+)\g{regsep}(?${REGFLAGS})?)
68             )/x,
69             funcname => $FUNCNAME,
70             varname => $VARNAME,
71             ##
72             text => $TEXT,
73             ## 0*(TEXT)
74             cstring => qr/[^[:cntrl:]]+/,
75             };
76            
77             ## cstring
78             ## | variable
79             ## | rebackref
80 20         19531 $REGEXP->{substring} = qr/
81             (?
82             (?:$REGEXP->{cstring})
83             |
84             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
85             (?:
86             (?&variable)
87             )
88             )
89             |
90             (?(?=\$\{?${DIGIT}\}?\b)
91             \$${DIGIT}
92             )
93             )
94             (?(DEFINE)
95             (?
96             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
97             (?:
98             (?&stringcomp)
99             )
100             )
101             |
102             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
103             (?:
104             (?&integercomp)
105             )
106             )
107             |
108             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
109             (?:
110             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
111             [[:blank:]\h]+
112             (?&word)
113             )
114             )
115             |
116             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
117             (?:
118             (?&word)
119             [[:blank:]\h]+
120             (?:
121             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
122             |
123             \-(?ipmatch|strmatch|strcmatch|fnmatch)
124             )
125             [[:blank:]\h]+
126             (?&word)
127             )
128             )
129             |
130             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
131             (?:
132             (?&word)
133             [[:blank:]\h]+
134             in
135             [[:blank:]\h]+
136             (?&listfunc)
137             )
138             )
139             |
140             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
141             (?:
142             (?&word)
143             [[:blank:]\h]+
144             [\=|\!]\~
145             [[:blank:]\h]+
146             $REGEXP->{regex}
147             )
148             )
149             |
150             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
151             (?:
152             (?&word)
153             [[:blank:]\h]+
154             in
155             [[:blank:]\h]+
156             \{
157             [[:blank:]\h]*
158             (?&words)
159             [[:blank:]\h]*
160             \}
161             )
162             )
163             )
164              
165             (?
166             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
167             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
168             )
169             )
170              
171             (?
172             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
173             (?:
174             (?(?&word))
175             [[:blank:]\h]+
176             \-?(?:eq|ne|lt|le|gt|ge)
177             [[:blank:]\h]+
178             (?(?&word))
179             )
180             )
181             )
182              
183             (?
184             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
185             (?:
186             (?[a-zA-Z\_]\w+)
187             \(
188             [[:blank:]\h]*
189             (?&words)
190             [[:blank:]\h]*
191             \)
192             )
193             )
194             )
195              
196              
197             (?
198             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable))[[:blank:]\h]+(?:$TEXT|&variable))
199             (?:(?-1)[[:blank:]\h]+(?&substring_recur))
200             )
201             |
202             (?(?=(?:$TEXT|&variable))
203             (?&substring_recur) # Recurse on the entire substring regexp
204             )
205             )
206             (?
207             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
208             (?:
209             (?(?&word))
210             [[:blank:]\h]+
211             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
212             [[:blank:]\h]+
213             (?(?&word))
214             )
215             )
216             )
217              
218             (?
219             (?:$REGEXP->{cstring})
220             |
221             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
222             (?:
223             (?&variable)
224             )
225             )
226             )
227             (?
228             (?:
229             \%\{
230             (?(?=${FUNCNAME}\:)
231             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
232             )
233             \}
234             )
235             |
236             (?:
237             \%\{
238             (?(?=${VARNAME}\})
239             (?${VARNAME})
240             )
241             \}
242             )
243             )
244              
245             (?
246             (?:
247             $REGEXP->{digits}
248             )
249             |
250             (?:
251             \'
252             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
253             (?(?&string))
254             )
255             \'
256             )
257             |
258             (?:
259             \"
260             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
261             (?(?&string))
262             )
263             \"
264             )
265             |
266             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
267             (?:
268             (?&function)
269             )
270             )
271             |
272             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
273             (?:
274             (?(?&variable))
275             )
276             )
277             |
278             (?(?=\$\{?${DIGIT}\}?\b)
279             \$${DIGIT}
280             )
281             |
282             (?:
283             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
284             )
285             )
286              
287             (?
288             (?:
289             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
290             (?&word)
291             )
292             [[:blank:]\h]*\,[[:blank:]\h]*
293             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
294             (?&word)
295             )
296             )
297             |
298             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
299             (?&word)
300             )
301             )
302              
303             )
304             /x;
305             ## substring
306             ## | string substring
307 20         24985 $REGEXP->{string} = qr/
308             (?
309             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable))[[:blank:]\h]+(?:$TEXT|&variable))
310             (?:(?R)[[:blank:]\h]+(?&substring))
311             )
312             |
313             (?(?=(?:$TEXT|&variable))
314             (?&substring) # Recurse on the entire substring regexp
315             )
316             )
317             (?(DEFINE)
318             (?
319             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
320             (?:
321             (?&stringcomp)
322             )
323             )
324             |
325             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
326             (?:
327             (?&integercomp)
328             )
329             )
330             |
331             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
332             (?:
333             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
334             [[:blank:]\h]+
335             (?&word)
336             )
337             )
338             |
339             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
340             (?:
341             (?&word)
342             [[:blank:]\h]+
343             (?:
344             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
345             |
346             \-(?ipmatch|strmatch|strcmatch|fnmatch)
347             )
348             [[:blank:]\h]+
349             (?&word)
350             )
351             )
352             |
353             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
354             (?:
355             (?&word)
356             [[:blank:]\h]+
357             in
358             [[:blank:]\h]+
359             (?&listfunc)
360             )
361             )
362             |
363             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
364             (?:
365             (?&word)
366             [[:blank:]\h]+
367             [\=|\!]\~
368             [[:blank:]\h]+
369             $REGEXP->{regex}
370             )
371             )
372             |
373             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
374             (?:
375             (?&word)
376             [[:blank:]\h]+
377             in
378             [[:blank:]\h]+
379             \{
380             [[:blank:]\h]*
381             (?&words)
382             [[:blank:]\h]*
383             \}
384             )
385             )
386             )
387              
388             (?
389             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
390             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
391             )
392             )
393              
394             (?
395             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
396             (?:
397             (?(?&word))
398             [[:blank:]\h]+
399             \-?(?:eq|ne|lt|le|gt|ge)
400             [[:blank:]\h]+
401             (?(?&word))
402             )
403             )
404             )
405              
406             (?
407             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
408             (?:
409             (?[a-zA-Z\_]\w+)
410             \(
411             [[:blank:]\h]*
412             (?&words)
413             [[:blank:]\h]*
414             \)
415             )
416             )
417             )
418              
419             (?
420             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable))[[:blank:]\h]+(?:$TEXT|&variable))
421             (?:(?-1)[[:blank:]\h]+(?&substring))
422             )
423             |
424             (?(?=(?:$TEXT|&variable))
425             (?&substring) # Recurse on the entire substring regexp
426             )
427             )
428             (?
429             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
430             (?:
431             (?(?&word))
432             [[:blank:]\h]+
433             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
434             [[:blank:]\h]+
435             (?(?&word))
436             )
437             )
438             )
439              
440             (?
441             (?:
442             (?$REGEXP->{cstring})
443             )
444             |
445             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
446             (?:
447             (?&variable)
448             )
449             )
450             |
451             (?(?=\$\{?${DIGIT}\}?\b)
452             \$${DIGIT}
453             )
454             )
455              
456             (?
457             (?:
458             \%\{
459             (?(?=${FUNCNAME}\:)
460             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
461             )
462             \}
463             )
464             |
465             (?:
466             \%\{
467             (?(?=${VARNAME}\})
468             (?${VARNAME})
469             )
470             \}
471             )
472             )
473              
474             (?
475             (?:
476             $REGEXP->{digits}
477             )
478             |
479             (?:
480             \'
481             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
482             (?(?&string_recur))
483             )
484             \'
485             )
486             |
487             (?:
488             \"
489             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
490             (?(?&string_recur))
491             )
492             \"
493             )
494             |
495             (?:
496             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
497             )
498             |
499             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
500             (?:
501             (?&function)
502             )
503             )
504             |
505             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
506             (?:
507             (?(?&variable))
508             )
509             )
510             |
511             (?(?=\$\{?${DIGIT}\}?\b)
512             \$${DIGIT}
513             )
514             )
515             (?
516             (?:
517             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
518             (?&word)
519             )
520             [[:blank:]\h]*\,[[:blank:]\h]*
521             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
522             (?&word)
523             )
524             )
525             |
526             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
527             (?&word)
528             )
529             )
530              
531             )/x;
532              
533             ## "true"
534             ## | "false"
535             ## | "!" cond
536             ## | cond "&&" cond
537             ## | cond "||" cond
538             ## | "(" cond ")"
539             ## | comp
540 20         1020 $REGEXP->{cond} = qr/
541             (?
542             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
543             (?:\([[:blank:]\h]*(?&cond_recur)[[:blank:]\h]*\))
544             )
545             |
546             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+))) # Recurse on the entire comp regexp
547             (?:
548             (?&comp)
549             )
550             )
551             |
552             (?(?=\![[:blank:]\h]*(?:(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))) # Recurring the entire COND expression
553             (?\![[:blank:]\h]*(?&cond_recur))
554             )
555             |
556             (?(?=(?:.*?)[[:blank:]\h]*\&\&[[:blank:]\h]*(?:.*?))
557             (?(?&cond_recur)[[:blank:]\h]*\&\&[[:blank:]\h]*(?&cond_recur))
558             )
559             |
560             (?(?=(?:.*?)[[:blank:]\h]*\|\|[[:blank:]\h]*(?:.*?))
561             (?(?&cond_recur)[[:blank:]\h]*\|\|[[:blank:]\h]*(?&cond_recur))
562             )
563             |
564             (?(?=$Regexp::Common::Apache2::ap_true)
565             (?$Regexp::Common::Apache2::ap_true)
566             )
567             |
568             (?(?=$Regexp::Common::Apache2::ap_false)
569             (?$Regexp::Common::Apache2::ap_false)
570             )
571             )
572             (?(DEFINE)
573             (?
574             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
575             (?:
576             (?&stringcomp)
577             )
578             )
579             |
580             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
581             (?:
582             (?&integercomp)
583             )
584             )
585             |
586             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
587             (?:
588             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
589             [[:blank:]\h]+
590             (?&word)
591             )
592             )
593             |
594             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
595             (?:
596             (?&word)
597             [[:blank:]\h]+
598             (?:
599             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
600             |
601             \-(?ipmatch|strmatch|strcmatch|fnmatch)
602             )
603             [[:blank:]\h]+
604             (?&word)
605             )
606             )
607             |
608             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
609             (?:
610             (?&word)
611             [[:blank:]\h]+
612             in
613             [[:blank:]\h]+
614             (?&listfunc)
615             )
616             )
617             |
618             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
619             (?:
620             (?&word)
621             [[:blank:]\h]+
622             [\=|\!]\~
623             [[:blank:]\h]+
624             $REGEXP->{regex}
625             )
626             )
627             |
628             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
629             (?:
630             (?&word)
631             [[:blank:]\h]+
632             in
633             [[:blank:]\h]+
634             \{
635             [[:blank:]\h]*
636             (?&words)
637             [[:blank:]\h]*
638             \}
639             )
640             )
641             )
642              
643             (?
644             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
645             (?:\([[:blank:]\h]*(?&cond_recur)[[:blank:]\h]*\))
646             )
647             |
648             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
649             (?:
650             (?&comp)
651             )
652             )
653             |
654             (?(?=\![[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
655             (?:\![[:blank:]\h]*(?&cond_recur))
656             )
657             |
658             (?(?=(?:.*?)[[:blank:]\h]*\&\&[[:blank:]\h]*(?:.*?))
659             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
660             )
661             |
662             (?(?=(?:.*?)[[:blank:]\h]*\|\|[[:blank:]\h]*(?:.*?))
663             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
664             )
665             |
666             (?(?=$Regexp::Common::Apache2::ap_true)
667             (?:$Regexp::Common::Apache2::ap_true)
668             )
669             |
670             (?(?=$Regexp::Common::Apache2::ap_false)
671             (?:$Regexp::Common::Apache2::ap_false)
672             )
673             )
674             (?
675             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
676             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
677             )
678             )
679              
680             (?
681             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
682             (?:
683             (?(?&word))
684             [[:blank:]\h]+
685             \-?(?:eq|ne|lt|le|gt|ge)
686             [[:blank:]\h]+
687             (?(?&word))
688             )
689             )
690             )
691              
692             (?
693             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
694             (?:
695             (?[a-zA-Z\_]\w+)
696             \(
697             [[:blank:]\h]*
698             (?&words)
699             [[:blank:]\h]*
700             \)
701             )
702             )
703             )
704              
705             (?
706             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
707             (?:(?&substring)[[:blank:]\h]+(?&string))
708             )
709             |
710             (?(?=(?:$TEXT|&variable))
711             (?&substring)
712             )
713             )
714              
715             (?
716             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
717             (?:
718             (?(?&word))
719             [[:blank:]\h]+
720             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
721             [[:blank:]\h]+
722             (?(?&word))
723             )
724             )
725             )
726              
727             (?
728             (?:
729             (?$REGEXP->{cstring})
730             )
731             |
732             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
733             (?:
734             (?&variable)
735             )
736             )
737             |
738             (?(?=\$\{?${DIGIT}\}?\b)
739             \$${DIGIT}
740             )
741             )
742              
743             (?
744             (?:
745             \%\{
746             (?(?=${FUNCNAME}\:)
747             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
748             )
749             \}
750             )
751             |
752             (?:
753             \%\{
754             (?(?=${VARNAME}\})
755             (?${VARNAME})
756             )
757             \}
758             )
759             )
760             (?
761             (?:
762             $REGEXP->{digits}
763             )
764             |
765             (?:
766             \'
767             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
768             (?(?&string))
769             )
770             \'
771             )
772             |
773             (?:
774             \"
775             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
776             (?(?&string))
777             )
778             \"
779             )
780             |
781             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
782             (?:
783             (?&function)
784             )
785             )
786             |
787             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
788             (?:
789             (?(?&variable))
790             )
791             )
792             |
793             (?(?=\$\{?${DIGIT}\}?\b)
794             \$${DIGIT}
795             )
796             |
797             (?:
798             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
799             )
800             )
801              
802             (?
803             (?:
804             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
805             (?&word)
806             )
807             [[:blank:]\h]*\,[[:blank:]\h]*
808             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
809             (?&word)
810             )
811             )
812             |
813             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
814             (?&word)
815             )
816             )
817              
818             )
819             /xi;
820              
821             ## funcname "(" words ")"
822             ## -> Same as LISTFUNC
823 20         24403 $REGEXP->{function} = qr/
824             (?
825             (?(?=[a-zA-Z\_]\w+\()
826             (?[a-zA-Z\_]\w+)\([[:blank:]\h]*(?(?&words))[[:blank:]\h]*\)
827             )
828             )
829             (?(DEFINE)
830             (?
831             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
832             (?:
833             (?&stringcomp)
834             )
835             )
836             |
837             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
838             (?:
839             (?&integercomp)
840             )
841             )
842             |
843             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
844             (?:
845             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
846             [[:blank:]\h]+
847             (?&word)
848             )
849             )
850             |
851             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
852             (?:
853             (?&word)
854             [[:blank:]\h]+
855             (?:
856             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
857             |
858             \-(?ipmatch|strmatch|strcmatch|fnmatch)
859             )
860             [[:blank:]\h]+
861             (?&word)
862             )
863             )
864             |
865             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
866             (?:
867             (?&word)
868             [[:blank:]\h]+
869             in
870             [[:blank:]\h]+
871             (?&listfunc)
872             )
873             )
874             |
875             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
876             (?:
877             (?&word)
878             [[:blank:]\h]+
879             [\=|\!]\~
880             [[:blank:]\h]+
881             $REGEXP->{regex}
882             )
883             )
884             |
885             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
886             (?:
887             (?&word)
888             [[:blank:]\h]+
889             in
890             [[:blank:]\h]+
891             \{
892             [[:blank:]\h]*
893             (?&words)
894             [[:blank:]\h]*
895             \}
896             )
897             )
898             )
899              
900             (?
901             (?(?=[a-zA-Z\_]\w+\()
902             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\) # R recurring on the entire words regexp
903             )
904             )
905             (?
906             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
907             (?:
908             (?(?&word))
909             [[:blank:]\h]+
910             \-?(?:eq|ne|lt|le|gt|ge)
911             [[:blank:]\h]+
912             (?(?&word))
913             )
914             )
915             )
916              
917             (?
918             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
919             (?:
920             (?[a-zA-Z\_]\w+)
921             \(
922             [[:blank:]\h]*
923             (?&words)
924             [[:blank:]\h]*
925             \)
926             )
927             )
928             )
929              
930             (?
931             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
932             (?:(?&substring)[[:blank:]\h]+(?&string))
933             )
934             |
935             (?(?=(?:$TEXT|&variable))
936             (?&substring)
937             )
938             )
939              
940             (?
941             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
942             (?:
943             (?(?&word))
944             [[:blank:]\h]+
945             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
946             [[:blank:]\h]+
947             (?(?&word))
948             )
949             )
950             )
951              
952             (?
953             (?:
954             (?$REGEXP->{cstring})
955             )
956             |
957             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
958             (?:
959             (?&variable)
960             )
961             )
962             |
963             (?(?=\$\{?${DIGIT}\}?\b)
964             \$${DIGIT}
965             )
966             )
967              
968             (?
969             (?:
970             \%\{
971             (?(?=${FUNCNAME}\:)
972             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
973             )
974             \}
975             )
976             |
977             (?:
978             \%\{
979             (?(?=${VARNAME}\})
980             (?${VARNAME})
981             )
982             \}
983             )
984             )
985              
986             (?
987             (?:
988             $REGEXP->{digits}
989             )
990             |
991             (?:
992             \'
993             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
994             (?(?&string))
995             )
996             \'
997             )
998             |
999             (?:
1000             \"
1001             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1002             (?(?&string))
1003             )
1004             \"
1005             )
1006             |
1007             (?:
1008             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
1009             )
1010             |
1011             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1012             (?:
1013             (?&function_recur)
1014             )
1015             )
1016             |
1017             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1018             (?:
1019             (?(?&variable))
1020             )
1021             )
1022             |
1023             (?(?=\$\{?${DIGIT}\}?\b)
1024             \$${DIGIT}
1025             )
1026             )
1027             (?
1028             (?:
1029             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1030             (?&word)
1031             )
1032             [[:blank:]\h]*\,[[:blank:]\h]*
1033             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1034             (?&word)
1035             )
1036             )
1037             |
1038             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1039             (?&word)
1040             )
1041             )
1042              
1043             )
1044             /x;
1045              
1046             ## listfuncname "(" words ")"
1047             ## Use recursion at execution phase for words because it contains dependencies -> list -> listfunc
1048             #(??{$REGEXP->{words}})
1049 20         672 $REGEXP->{listfunc} = qr/
1050             (?
1051             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1052             (?:
1053             (?[a-zA-Z\_]\w+)
1054             \(
1055             [[:blank:]\h]*
1056             (?(?&words))
1057             [[:blank:]\h]*
1058             \)
1059             )
1060             )
1061             )
1062             (?(DEFINE)
1063             (?
1064             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))(?&stringcomp))
1065             |
1066             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))(?&integercomp))
1067             |
1068             (?:
1069             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
1070             [[:blank:]\h]+
1071             (?&word) # Recurse on the entire word regexp
1072             )
1073             |
1074             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
1075             (?&word) # Recurse on the entire word regexp
1076             [[:blank:]\h]+
1077             (?:
1078             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
1079             |
1080             \-(?ipmatch|strmatch|strcmatch|fnmatch)
1081             )
1082             [[:blank:]\h]+
1083             (?&word) # Recurse on the entire word regexp
1084             )
1085             |
1086             (?(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
1087             (?&word) # Recurse on the entire word regexp
1088             [[:blank:]\h]+
1089             in
1090             [[:blank:]\h]+
1091             (?&listfunc_recur)
1092             )
1093             |
1094             (?(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
1095             (?&word) # Recurse on the entire word regexp
1096             [[:blank:]\h]+
1097             [\=|\!]\~
1098             [[:blank:]\h]+
1099             $REGEXP->{regex}
1100             )
1101             |
1102             (?(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
1103             (?&word) # Recurse on the entire word regexp
1104             [[:blank:]\h]+
1105             in
1106             [[:blank:]\h]+
1107             \{
1108             [[:blank:]\h]*
1109             (?&words)
1110             [[:blank:]\h]*
1111             \}
1112             )
1113             )
1114             (?
1115             (?:$Regexp::Common::Apache2::ap_true)
1116             |
1117             (?:$Regexp::Common::Apache2::ap_false)
1118             |
1119             (?:\![[:blank:]\h]*(?-1))
1120             |
1121             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
1122             |
1123             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
1124             |
1125             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
1126             (?:
1127             (?&comp)
1128             )
1129             )
1130             |
1131             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
1132             )
1133              
1134             (?
1135             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1136             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
1137             )
1138             )
1139              
1140             (?
1141             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1142             (?:
1143             (?(?&word))
1144             [[:blank:]\h]+
1145             \-?(?:eq|ne|lt|le|gt|ge)
1146             [[:blank:]\h]+
1147             (?(?&word))
1148             )
1149             )
1150             )
1151              
1152             (?
1153             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1154             (?:
1155             (?[a-zA-Z\_]\w+)
1156             \(
1157             [[:blank:]\h]*
1158             (?&words)
1159             [[:blank:]\h]*
1160             \)
1161             )
1162             )
1163             )
1164             (?
1165             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1166             (?:(?&substring)[[:blank:]\h]+(?&string))
1167             )
1168             |
1169             (?(?=(?:$TEXT|&variable))
1170             (?&substring)
1171             )
1172             )
1173              
1174             (?
1175             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1176             (?:
1177             (?(?&word))
1178             [[:blank:]\h]+
1179             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
1180             [[:blank:]\h]+
1181             (?(?&word))
1182             )
1183             )
1184             )
1185              
1186             (?
1187             (?:
1188             (?$REGEXP->{cstring})
1189             )
1190             |
1191             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1192             (?:
1193             (?&variable)
1194             )
1195             )
1196             |
1197             (?(?=\$\{?${DIGIT}\}?\b)
1198             \$${DIGIT}
1199             )
1200             )
1201              
1202             (?
1203             (?:
1204             \%\{
1205             (?(?=${FUNCNAME}\:)
1206             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
1207             )
1208             \}
1209             )
1210             |
1211             (?:
1212             \%\{
1213             (?(?=${VARNAME}\})
1214             (?${VARNAME})
1215             )
1216             \}
1217             )
1218             )
1219              
1220             (?
1221             (?:
1222             $REGEXP->{digits}
1223             )
1224             |
1225             (?:
1226             \'
1227             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1228             (?(?&string))
1229             )
1230             \'
1231             )
1232             |
1233             (?:
1234             \"
1235             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1236             (?(?&string))
1237             )
1238             \"
1239             )
1240             |
1241             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1242             (?:
1243             (?&function)
1244             )
1245             )
1246             |
1247             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1248             (?:
1249             (?(?&variable))
1250             )
1251             )
1252             |
1253             (?(?=\$\{?${DIGIT}\}?\b)
1254             \$${DIGIT}
1255             )
1256             |
1257             (?:
1258             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
1259             )
1260             )
1261              
1262             (?
1263             (?:
1264             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1265             (?&word)
1266             )
1267             [[:blank:]\h]*\,[[:blank:]\h]*
1268             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1269             (?&word)
1270             )
1271             )
1272             |
1273             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1274             (?&word)
1275             )
1276             )
1277              
1278             )
1279             /x;
1280              
1281             ## digits
1282             ## | "'" string "'"
1283             ## | '"' string '"'
1284             ## | word "." word
1285             ## | variable
1286             ## | sub
1287             ## | join
1288             ## | function
1289             ## | "(" word ")"
1290 20         20385 $REGEXP->{word} = qr/
1291             (?
1292             (?:
1293             (?$REGEXP->{digits})
1294             )
1295             |
1296             (?(?=\'(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1297             (?\')(?(?&string))\'
1298             )
1299             |
1300             (?(?=\"(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1301             (?\")(?(?&string))\"
1302             )
1303             |
1304             (?:
1305             (?[^[:cntrl:]]+\.[^[:cntrl:]]+)
1306             )
1307             |
1308             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1309             (?(?&function))
1310             )
1311             |
1312             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1313             (?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1314             (?(?&variable))
1315             )
1316             |
1317             (?(?=\$\{?${DIGIT}\}?\b)
1318             \$${DIGIT}
1319             )
1320             )
1321             (?(DEFINE)
1322             (?
1323             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))(?&stringcomp))
1324             |
1325             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))(?&integercomp))
1326             |
1327             (?:
1328             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
1329             [[:blank:]\h]+
1330             (?&word_recur) # Recurse on the entire word regexp
1331             )
1332             |
1333             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
1334             (?&word_recur) # Recurse on the entire word regexp
1335             [[:blank:]\h]+
1336             (?:
1337             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
1338             |
1339             \-(?ipmatch|strmatch|strcmatch|fnmatch)
1340             )
1341             [[:blank:]\h]+
1342             (?&word_recur) # Recurse on the entire word regexp
1343             )
1344             |
1345             (?(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
1346             (?&word_recur) # Recurse on the entire word regexp
1347             [[:blank:]\h]+
1348             in
1349             [[:blank:]\h]+
1350             (?&listfunc)
1351             )
1352             |
1353             (?(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
1354             (?&word_recur) # Recurse on the entire word regexp
1355             [[:blank:]\h]+
1356             [\=|\!]\~
1357             [[:blank:]\h]+
1358             $REGEXP->{regex}
1359             )
1360             |
1361             (?(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
1362             (?&word_recur) # Recurse on the entire word regexp
1363             [[:blank:]\h]+
1364             in
1365             [[:blank:]\h]+
1366             \{
1367             [[:blank:]\h]*
1368             (?&words)
1369             [[:blank:]\h]*
1370             \}
1371             )
1372             )
1373             (?
1374             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1375             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
1376             )
1377             )
1378              
1379             (?
1380             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1381             (?:
1382             (?(?&word_recur)) # Recurse on the entire word regexp
1383             [[:blank:]\h]+
1384             \-?(?:eq|ne|lt|le|gt|ge)
1385             [[:blank:]\h]+
1386             (?(?&word_recur)) # Recurse on the entire word regexp
1387             )
1388             )
1389             )
1390             (?
1391             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1392             (?:
1393             (?[a-zA-Z\_]\w+)
1394             \(
1395             [[:blank:]\h]*
1396             (?&words)
1397             [[:blank:]\h]*
1398             \)
1399             )
1400             )
1401             )
1402              
1403             (?
1404             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1405             (?:(?&substring)[[:blank:]\h]+(?&string))
1406             )
1407             |
1408             (?(?=(?:$TEXT|&variable))
1409             (?&substring)
1410             )
1411             )
1412              
1413             (?
1414             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1415             (?(?&word_recur)) # Recurse on the entire word regexp
1416             [[:blank:]\h]+
1417             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
1418             [[:blank:]\h]+
1419             (?(?&word_recur)) # Recurse on the entire word regexp
1420             )
1421             )
1422             (?
1423             (?:
1424             (?$REGEXP->{cstring})
1425             )
1426             |
1427             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1428             (?:
1429             (?&variable)
1430             )
1431             )
1432             |
1433             (?(?=\$\{?${DIGIT}\}?\b)
1434             \$${DIGIT}
1435             )
1436             )
1437              
1438             (?
1439             (?:
1440             \%\{
1441             (?(?=${FUNCNAME}\:)
1442             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
1443             )
1444             \}
1445             )
1446             |
1447             (?:
1448             \%\{
1449             (?(?=${VARNAME}\})
1450             (?${VARNAME})
1451             )
1452             \}
1453             )
1454             )
1455             (?
1456             (?:
1457             $REGEXP->{digits}
1458             )
1459             |
1460             (?:
1461             \'
1462             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1463             (?(?&string))
1464             )
1465             \'
1466             )
1467             |
1468             (?:
1469             \"
1470             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1471             (?(?&string))
1472             )
1473             \"
1474             )
1475             |
1476             (?:
1477             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
1478             )
1479             |
1480             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1481             (?:
1482             (?&function)
1483             )
1484             )
1485             |
1486             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1487             (?:
1488             (?(?&variable))
1489             )
1490             )
1491             |
1492             (?(?=\$\{?${DIGIT}\}?\b)
1493             \$${DIGIT}
1494             )
1495             )
1496             (?
1497             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1498             (?:
1499             (?:
1500             (?&word)
1501             [[:blank:]\h]*\,[[:blank:]\h]*
1502             (?-1)
1503             )
1504             |
1505             (?:
1506             (?&word)
1507             )
1508             )
1509             )
1510             )
1511             )
1512             /x;
1513            
1514             ## "%{" varname "}"
1515             ## | "%{" funcname ":" funcargs "}"
1516             ## | "%{:" word ":}"
1517             ## | "%{:" cond ":}"
1518             ## | rebackref
1519 20         118452 $REGEXP->{variable} = qr/
1520             (?
1521             (?:
1522             \%\{
1523             (?(?=${FUNCNAME}\:)
1524             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
1525             )
1526             \}
1527             )
1528             |
1529             (?:
1530             \%\{
1531             (?(?=${VARNAME})
1532             (?${VARNAME})
1533             )
1534             \}
1535             )
1536             )
1537             (?(DEFINE)
1538             (?
1539             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1540             (?:
1541             (?&stringcomp)
1542             )
1543             )
1544             |
1545             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1546             (?:
1547             (?&integercomp)
1548             )
1549             )
1550             |
1551             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
1552             (?:
1553             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
1554             [[:blank:]\h]+
1555             (?&word)
1556             )
1557             )
1558             |
1559             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
1560             (?:
1561             (?&word)
1562             [[:blank:]\h]+
1563             (?:
1564             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
1565             |
1566             \-(?ipmatch|strmatch|strcmatch|fnmatch)
1567             )
1568             [[:blank:]\h]+
1569             (?&word)
1570             )
1571             )
1572             |
1573             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
1574             (?:
1575             (?&word)
1576             [[:blank:]\h]+
1577             in
1578             [[:blank:]\h]+
1579             (?&listfunc)
1580             )
1581             )
1582             |
1583             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
1584             (?:
1585             (?&word)
1586             [[:blank:]\h]+
1587             [\=|\!]\~
1588             [[:blank:]\h]+
1589             $REGEXP->{regex}
1590             )
1591             )
1592             |
1593             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
1594             (?:
1595             (?&word)
1596             [[:blank:]\h]+
1597             in
1598             [[:blank:]\h]+
1599             \{
1600             [[:blank:]\h]*
1601             (?&words)
1602             [[:blank:]\h]*
1603             \}
1604             )
1605             )
1606             )
1607              
1608             (?
1609             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1610             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
1611             )
1612             )
1613              
1614             (?
1615             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1616             (?:
1617             (?(?&word))
1618             [[:blank:]\h]+
1619             \-?(?:eq|ne|lt|le|gt|ge)
1620             [[:blank:]\h]+
1621             (?(?&word))
1622             )
1623             )
1624             )
1625              
1626             (?
1627             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1628             (?:
1629             (?[a-zA-Z\_]\w+)
1630             \(
1631             [[:blank:]\h]*
1632             (?&words)
1633             [[:blank:]\h]*
1634             \)
1635             )
1636             )
1637             )
1638              
1639             (?
1640             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1641             (?:(?&substring)[[:blank:]\h]+(?&string))
1642             )
1643             |
1644             (?(?=(?:$TEXT|&variable))
1645             (?&substring)
1646             )
1647             )
1648              
1649             (?
1650             (?:
1651             (?:$REGEXP->{cstring})
1652             |
1653             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))(?R)) # Recurse on the entire variable regexp if it looks like one
1654             )
1655             )
1656             (?
1657             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1658             (?:
1659             (?(?&word))
1660             [[:blank:]\h]+
1661             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
1662             [[:blank:]\h]+
1663             (?(?&word))
1664             )
1665             )
1666             )
1667              
1668             (?
1669             (?:
1670             \%\{
1671             (?(?=${FUNCNAME}\:)
1672             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
1673             )
1674             \}
1675             )
1676             |
1677             (?:
1678             \%\{
1679             (?(?=${VARNAME}\})
1680             (?${VARNAME})
1681             )
1682             \}
1683             )
1684             )
1685             (?
1686             (?:$REGEXP->{digits})
1687             |
1688             (?:
1689             \'
1690             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1691             (?(?&string))
1692             )
1693             \'
1694             )
1695             |
1696             (?:
1697             \"
1698             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1699             (?(?&string))
1700             )
1701             \"
1702             )
1703             |
1704             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1705             (?:
1706             (?&function)
1707             )
1708             )
1709             |
1710             (?:[^[:cntrl:]]+)\.(?:[^[:cntrl:]]+)
1711             |
1712             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1713             (?:
1714             (?(?&variable_recur))
1715             )
1716             )
1717             |
1718             (?(?=\$\{?${DIGIT}\}?\b)
1719             \$${DIGIT}
1720             )
1721             )
1722             (?
1723             (?:
1724             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1725             (?&word)
1726             )
1727             [[:blank:]\h]*\,[[:blank:]\h]*
1728             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1729             (?&word)
1730             )
1731             )
1732             |
1733             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1734             (?&word)
1735             )
1736             )
1737              
1738             )
1739             /x;
1740              
1741             ## word
1742             ## | word "," list
1743 20         23309 $REGEXP->{words} = qr/
1744             (?
1745             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1746             (?:
1747             (?:
1748             (?(?&word))
1749             [[:blank:]\h]*\,[[:blank:]\h]*
1750             (?(?-1))
1751             )
1752             |
1753             (?:
1754             (?(?&word))
1755             )
1756             )
1757             )
1758             )
1759             (?(DEFINE)
1760             (?
1761             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1762             (?:
1763             (?&stringcomp)
1764             )
1765             )
1766             |
1767             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1768             (?:
1769             (?&integercomp)
1770             )
1771             )
1772             |
1773             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
1774             (?:
1775             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
1776             [[:blank:]\h]+
1777             (?&word)
1778             )
1779             )
1780             |
1781             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
1782             (?:
1783             (?&word)
1784             [[:blank:]\h]+
1785             (?:
1786             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
1787             |
1788             \-(?ipmatch|strmatch|strcmatch|fnmatch)
1789             )
1790             [[:blank:]\h]+
1791             (?&word)
1792             )
1793             )
1794             |
1795             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
1796             (?:
1797             (?&word)
1798             [[:blank:]\h]+
1799             in
1800             [[:blank:]\h]+
1801             (?&listfunc)
1802             )
1803             )
1804             |
1805             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
1806             (?:
1807             (?&word)
1808             [[:blank:]\h]+
1809             [\=|\!]\~
1810             [[:blank:]\h]+
1811             $REGEXP->{regex}
1812             )
1813             )
1814             |
1815             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
1816             (?:
1817             (?&word)
1818             [[:blank:]\h]+
1819             in
1820             [[:blank:]\h]+
1821             \{
1822             [[:blank:]\h]*
1823             (?&words)
1824             [[:blank:]\h]*
1825             \}
1826             )
1827             )
1828             )
1829              
1830             (?
1831             (?(?=[a-zA-Z\_]\w+\()
1832             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words_recur)[[:blank:]\h]*\) # R recurring on the entire words regexp
1833             )
1834             )
1835             (?
1836             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1837             (?:
1838             (?(?&word))
1839             [[:blank:]\h]+
1840             \-?(?:eq|ne|lt|le|gt|ge)
1841             [[:blank:]\h]+
1842             (?(?&word))
1843             )
1844             )
1845             )
1846              
1847             (?
1848             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1849             (?:
1850             (?[a-zA-Z\_]\w+)
1851             \(
1852             [[:blank:]\h]*
1853             (?&words_recur) # R recurring on the entire words regexp
1854             [[:blank:]\h]*
1855             \)
1856             )
1857             )
1858             )
1859             (?
1860             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1861             (?:(?&substring)[[:blank:]\h]+(?&string))
1862             )
1863             |
1864             (?(?=(?:$TEXT|&variable))
1865             (?&substring)
1866             )
1867             )
1868              
1869             (?
1870             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1871             (?:
1872             (?(?&word))
1873             [[:blank:]\h]+
1874             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
1875             [[:blank:]\h]+
1876             (?(?&word))
1877             )
1878             )
1879             )
1880              
1881             (?
1882             (?:
1883             (?$REGEXP->{cstring})
1884             )
1885             |
1886             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1887             (?:
1888             (?&variable)
1889             )
1890             )
1891             |
1892             (?(?=\$\{?${DIGIT}\}?\b)
1893             \$${DIGIT}
1894             )
1895             )
1896              
1897             (?
1898             (?:
1899             \%\{
1900             (?(?=${FUNCNAME}\:)
1901             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
1902             )
1903             \}
1904             )
1905             |
1906             (?:
1907             \%\{
1908             (?(?=${VARNAME}\})
1909             (?${VARNAME})
1910             )
1911             \}
1912             )
1913             )
1914              
1915             (?
1916             (?:
1917             $REGEXP->{digits}
1918             )
1919             |
1920             (?:
1921             \'
1922             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1923             (?(?&string))
1924             )
1925             \'
1926             )
1927             |
1928             (?:
1929             \"
1930             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
1931             (?(?&string))
1932             )
1933             \"
1934             )
1935             |
1936             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1937             (?:
1938             (?&function)
1939             )
1940             )
1941             |
1942             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
1943             (?:
1944             (?(?&variable))
1945             )
1946             )
1947             |
1948             (?(?=\$\{?${DIGIT}\}?\b)
1949             \$${DIGIT}
1950             )
1951             |
1952             (?:
1953             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
1954             )
1955             )
1956              
1957             (?
1958             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1959             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\,[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1960             (?&word)
1961             [[:blank:]\h]*\,[[:blank:]\h]*
1962             (?-1)
1963             )
1964             |
1965             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
1966             (?&word)
1967             )
1968             )
1969             )
1970             )
1971             /x;
1972              
1973             ## word "==" word
1974             ## | word "!=" word
1975             ## | word "<" word
1976             ## | word "<=" word
1977             ## | word ">" word
1978             ## | word ">=" word
1979 20         20626 $REGEXP->{stringcomp} = qr/
1980             (?
1981             (?(?&word))
1982             [[:blank:]\h]+
1983             (?\=\=|\!\=|\<|\<\=|\>|\>\=)
1984             [[:blank:]\h]+
1985             (?(?&word))
1986             )
1987             (?(DEFINE)
1988             (?
1989             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1990             (?:
1991             (?&stringcomp_recur) # Recurse on the entire stringcomp regexp
1992             )
1993             )
1994             |
1995             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
1996             (?:
1997             (?&integercomp)
1998             )
1999             )
2000             |
2001             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
2002             (?:
2003             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
2004             [[:blank:]\h]+
2005             (?&word)
2006             )
2007             )
2008             |
2009             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
2010             (?:
2011             (?&word)
2012             [[:blank:]\h]+
2013             (?:
2014             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
2015             |
2016             \-(?ipmatch|strmatch|strcmatch|fnmatch)
2017             )
2018             [[:blank:]\h]+
2019             (?&word)
2020             )
2021             )
2022             |
2023             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
2024             (?:
2025             (?&word)
2026             [[:blank:]\h]+
2027             in
2028             [[:blank:]\h]+
2029             (?&listfunc)
2030             )
2031             )
2032             |
2033             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
2034             (?:
2035             (?&word)
2036             [[:blank:]\h]+
2037             [\=|\!]\~
2038             [[:blank:]\h]+
2039             $REGEXP->{regex}
2040             )
2041             )
2042             |
2043             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
2044             (?:
2045             (?&word)
2046             [[:blank:]\h]+
2047             in
2048             [[:blank:]\h]+
2049             \{
2050             [[:blank:]\h]*
2051             (?&words)
2052             [[:blank:]\h]*
2053             \}
2054             )
2055             )
2056             )
2057             (?
2058             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2059             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
2060             )
2061             )
2062              
2063             (?
2064             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2065             (?:
2066             (?(?&word))
2067             [[:blank:]\h]+
2068             \-?(?:eq|ne|lt|le|gt|ge)
2069             [[:blank:]\h]+
2070             (?(?&word))
2071             )
2072             )
2073             )
2074              
2075             (?
2076             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2077             (?:
2078             (?[a-zA-Z\_]\w+)
2079             \(
2080             [[:blank:]\h]*
2081             (?&words)
2082             [[:blank:]\h]*
2083             \)
2084             )
2085             )
2086             )
2087              
2088             (?
2089             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2090             (?:(?&substring)[[:blank:]\h]+(?&string))
2091             )
2092             |
2093             (?(?=(?:$TEXT|&variable))
2094             (?&substring)
2095             )
2096             )
2097              
2098             (?
2099             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2100             (?:
2101             (?(?&word))
2102             [[:blank:]\h]+
2103             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
2104             [[:blank:]\h]+
2105             (?(?&word))
2106             )
2107             )
2108             )
2109             (?
2110             (?:
2111             (?$REGEXP->{cstring})
2112             )
2113             |
2114             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
2115             (?:
2116             (?&variable)
2117             )
2118             )
2119             |
2120             (?(?=\$\{?${DIGIT}\}?\b)
2121             \$${DIGIT}
2122             )
2123             )
2124              
2125             (?
2126             (?:
2127             \%\{
2128             (?(?=${FUNCNAME}\:)
2129             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
2130             )
2131             \}
2132             )
2133             |
2134             (?:
2135             \%\{
2136             (?(?=${VARNAME}\})
2137             (?${VARNAME})
2138             )
2139             \}
2140             )
2141             )
2142              
2143             (?
2144             (?:
2145             $REGEXP->{digits}
2146             )
2147             |
2148             (?:
2149             \'
2150             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2151             (?(?&string))
2152             )
2153             \'
2154             )
2155             |
2156             (?:
2157             \"
2158             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2159             (?(?&string))
2160             )
2161             \"
2162             )
2163             |
2164             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2165             (?:
2166             (?&function)
2167             )
2168             )
2169             |
2170             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
2171             (?:
2172             (?(?&variable))
2173             )
2174             )
2175             |
2176             (?(?=\$\{?${DIGIT}\}?\b)
2177             \$${DIGIT}
2178             )
2179             |
2180             (?:
2181             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
2182             )
2183             )
2184              
2185             (?
2186             (?:
2187             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2188             (?&word)
2189             )
2190             [[:blank:]\h]*\,[[:blank:]\h]*
2191             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2192             (?&word)
2193             )
2194             )
2195             |
2196             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2197             (?&word)
2198             )
2199             )
2200              
2201             )
2202             /x;
2203              
2204             ## word "-eq" word | word "eq" word
2205             ## | word "-ne" word | word "ne" word
2206             ## | word "-lt" word | word "lt" word
2207             ## | word "-le" word | word "le" word
2208             ## | word "-gt" word | word "gt" word
2209             ## | word "-ge" word | word "ge" word
2210 20         19856 $REGEXP->{integercomp} = qr/
2211             (?
2212             (?(?&word))
2213             [[:blank:]\h]+
2214             \-?(?eq|ne|lt|le|gt|ge)
2215             [[:blank:]\h]+
2216             (?(?&word))
2217             )
2218             (?(DEFINE)
2219             (?
2220             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2221             (?:
2222             (?&stringcomp) # Recurse on the entire stringcomp regexp
2223             )
2224             )
2225             |
2226             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2227             (?:
2228             (?&integercomp_recur)
2229             )
2230             )
2231             |
2232             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
2233             (?:
2234             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
2235             [[:blank:]\h]+
2236             (?&word)
2237             )
2238             )
2239             |
2240             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
2241             (?:
2242             (?&word)
2243             [[:blank:]\h]+
2244             (?:
2245             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
2246             |
2247             \-(?ipmatch|strmatch|strcmatch|fnmatch)
2248             )
2249             [[:blank:]\h]+
2250             (?&word)
2251             )
2252             )
2253             |
2254             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
2255             (?:
2256             (?&word)
2257             [[:blank:]\h]+
2258             in
2259             [[:blank:]\h]+
2260             (?&listfunc)
2261             )
2262             )
2263             |
2264             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
2265             (?:
2266             (?&word)
2267             [[:blank:]\h]+
2268             [\=|\!]\~
2269             [[:blank:]\h]+
2270             $REGEXP->{regex}
2271             )
2272             )
2273             |
2274             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
2275             (?:
2276             (?&word)
2277             [[:blank:]\h]+
2278             in
2279             [[:blank:]\h]+
2280             \{
2281             [[:blank:]\h]*
2282             (?&words)
2283             [[:blank:]\h]*
2284             \}
2285             )
2286             )
2287             )
2288             (?
2289             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2290             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
2291             )
2292             )
2293              
2294             (?
2295             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2296             (?:
2297             (?(?&word))
2298             [[:blank:]\h]+
2299             \-?(?:eq|ne|lt|le|gt|ge)
2300             [[:blank:]\h]+
2301             (?(?&word))
2302             )
2303             )
2304             )
2305             (?
2306             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2307             (?:
2308             (?[a-zA-Z\_]\w+)
2309             \(
2310             [[:blank:]\h]*
2311             (?&words)
2312             [[:blank:]\h]*
2313             \)
2314             )
2315             )
2316             )
2317              
2318             (?
2319             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2320             (?:(?&substring)[[:blank:]\h]+(?&string))
2321             )
2322             |
2323             (?(?=(?:$TEXT|&variable))
2324             (?&substring)
2325             )
2326             )
2327              
2328             (?
2329             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2330             (?:
2331             (?(?&word))
2332             [[:blank:]\h]+
2333             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
2334             [[:blank:]\h]+
2335             (?(?&word))
2336             )
2337             )
2338             )
2339              
2340             (?
2341             (?:
2342             (?$REGEXP->{cstring})
2343             )
2344             |
2345             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
2346             (?:
2347             (?&variable)
2348             )
2349             )
2350             |
2351             (?(?=\$\{?${DIGIT}\}?\b)
2352             \$${DIGIT}
2353             )
2354             )
2355              
2356             (?
2357             (?:
2358             \%\{
2359             (?(?=${FUNCNAME}\:)
2360             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
2361             )
2362             \}
2363             )
2364             |
2365             (?:
2366             \%\{
2367             (?(?=${VARNAME}\})
2368             (?${VARNAME})
2369             )
2370             \}
2371             )
2372             )
2373              
2374             (?
2375             (?:
2376             $REGEXP->{digits}
2377             )
2378             |
2379             (?:
2380             \'
2381             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2382             (?(?&string))
2383             )
2384             \'
2385             )
2386             |
2387             (?:
2388             \"
2389             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2390             (?(?&string))
2391             )
2392             \"
2393             )
2394             |
2395             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2396             (?:
2397             (?&function)
2398             )
2399             )
2400             |
2401             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
2402             (?:
2403             (?(?&variable))
2404             )
2405             )
2406             |
2407             (?(?=\$\{?${DIGIT}\}?\b)
2408             \$${DIGIT}
2409             )
2410             |
2411             (?:
2412             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
2413             )
2414             )
2415              
2416             (?
2417             (?:
2418             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2419             (?&word)
2420             )
2421             [[:blank:]\h]*\,[[:blank:]\h]*
2422             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2423             (?&word)
2424             )
2425             )
2426             |
2427             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2428             (?&word)
2429             )
2430             )
2431              
2432             )
2433             /x;
2434            
2435             ## stringcomp
2436             ## | integercomp
2437             ## | unaryop word
2438             ## | word binaryop word
2439             ## | word "in" listfunc
2440             ## | word "=~" regex
2441             ## | word "!~" regex
2442             ## | word "in" "{" list "}"
2443             ## Ref:
2444             ##
2445             ##
2446 20         38909 $REGEXP->{comp} = qr/
2447             (?
2448             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2449             (?:
2450             (?(?&stringcomp))
2451             )
2452             )
2453             |
2454             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2455             (?:
2456             (?(?&integercomp))
2457             )
2458             )
2459             |
2460             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
2461             (?
2462             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
2463             [[:blank:]\h]+
2464             (?(?&word))
2465             )
2466             )
2467             |
2468             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
2469             (?
2470             (?(?&word))
2471             [[:blank:]\h]+
2472             (?:
2473             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
2474             |
2475             \-(?ipmatch|strmatch|strcmatch|fnmatch)
2476             )
2477             [[:blank:]\h]+
2478             (?(?&word))
2479             )
2480             )
2481             |
2482             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
2483             (?
2484             (?(?&word))
2485             [[:blank:]\h]+
2486             in
2487             [[:blank:]\h]+
2488             (?(?&listfunc))
2489             )
2490             )
2491             |
2492             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
2493             (?
2494             (?(?&word))
2495             [[:blank:]\h]+
2496             (?[\=|\!]\~)
2497             [[:blank:]\h]+
2498             (?$REGEXP->{regex})
2499             )
2500             )
2501             |
2502             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
2503             (?
2504             (?(?&word))
2505             [[:blank:]\h]+
2506             in
2507             [[:blank:]\h]+
2508             \{
2509             [[:blank:]\h]*
2510             (?(?&words))
2511             [[:blank:]\h]*
2512             \}
2513             )
2514             )
2515             )
2516             (?(DEFINE)
2517             (?
2518             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2519             (?:
2520             (?&stringcomp) # Recurse on the entire stringcomp regexp
2521             )
2522             )
2523             |
2524             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2525             (?:
2526             (?&integercomp)
2527             )
2528             )
2529             |
2530             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
2531             (?:
2532             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
2533             [[:blank:]\h]+
2534             (?&word)
2535             )
2536             )
2537             |
2538             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
2539             (?:
2540             (?&word)
2541             [[:blank:]\h]+
2542             (?:
2543             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
2544             |
2545             \-(?ipmatch|strmatch|strcmatch|fnmatch)
2546             )
2547             [[:blank:]\h]+
2548             (?&word)
2549             )
2550             )
2551             |
2552             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
2553             (?:
2554             (?&word)
2555             [[:blank:]\h]+
2556             in
2557             [[:blank:]\h]+
2558             (?&listfunc)
2559             )
2560             )
2561             |
2562             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
2563             (?:
2564             (?&word)
2565             [[:blank:]\h]+
2566             [\=|\!]\~
2567             [[:blank:]\h]+
2568             $REGEXP->{regex}
2569             )
2570             )
2571             |
2572             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
2573             (?:
2574             (?&word)
2575             [[:blank:]\h]+
2576             in
2577             [[:blank:]\h]+
2578             \{
2579             [[:blank:]\h]*
2580             (?&words)
2581             [[:blank:]\h]*
2582             \}
2583             )
2584             )
2585             )
2586             (?
2587             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2588             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
2589             )
2590             )
2591              
2592             (?
2593             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2594             (?:
2595             (?(?&word))
2596             [[:blank:]\h]+
2597             \-?(?:eq|ne|lt|le|gt|ge)
2598             [[:blank:]\h]+
2599             (?(?&word))
2600             )
2601             )
2602             )
2603              
2604             (?
2605             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2606             (?:
2607             (?[a-zA-Z\_]\w+)
2608             \(
2609             [[:blank:]\h]*
2610             (?&words)
2611             [[:blank:]\h]*
2612             \)
2613             )
2614             )
2615             )
2616              
2617             (?
2618             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2619             (?:(?&substring)[[:blank:]\h]+(?&string))
2620             )
2621             |
2622             (?(?=(?:$TEXT|&variable))
2623             (?&substring)
2624             )
2625             )
2626              
2627             (?
2628             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2629             (?:
2630             (?(?&word))
2631             [[:blank:]\h]+
2632             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
2633             [[:blank:]\h]+
2634             (?(?&word))
2635             )
2636             )
2637             )
2638              
2639             (?
2640             (?:
2641             (?$REGEXP->{cstring})
2642             )
2643             |
2644             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
2645             (?:
2646             (?&variable)
2647             )
2648             )
2649             |
2650             (?(?=\$\{?${DIGIT}\}?\b)
2651             \$${DIGIT}
2652             )
2653             )
2654              
2655             (?
2656             (?:
2657             \%\{
2658             (?(?=${FUNCNAME}\:)
2659             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
2660             )
2661             \}
2662             )
2663             |
2664             (?:
2665             \%\{
2666             (?(?=${VARNAME}\})
2667             (?${VARNAME})
2668             )
2669             \}
2670             )
2671             )
2672              
2673             (?
2674             (?:
2675             $REGEXP->{digits}
2676             )
2677             |
2678             (?:
2679             \'
2680             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2681             (?(?&string))
2682             )
2683             \'
2684             )
2685             |
2686             (?:
2687             \"
2688             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2689             (?(?&string))
2690             )
2691             \"
2692             )
2693             |
2694             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2695             (?:
2696             (?&function)
2697             )
2698             )
2699             |
2700             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
2701             (?:
2702             (?(?&variable))
2703             )
2704             )
2705             |
2706             (?(?=\$\{?${DIGIT}\}?\b)
2707             \$${DIGIT}
2708             )
2709             |
2710             (?:
2711             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
2712             )
2713             )
2714              
2715             (?
2716             (?:
2717             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2718             (?&word)
2719             )
2720             [[:blank:]\h]*\,[[:blank:]\h]*
2721             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2722             (?&word)
2723             )
2724             )
2725             |
2726             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2727             (?&word)
2728             )
2729             )
2730              
2731             )
2732             /x;
2733              
2734             ## cond
2735             ## | string
2736 20         1595 $REGEXP->{expr} = qr/
2737             (?
2738             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
2739             (?:
2740             (?(?&cond))
2741             )
2742             )
2743             |
2744             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2745             (?:
2746             (?(?&string))
2747             )
2748             )
2749             )
2750             (?(DEFINE)
2751             (?
2752             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2753             (?:
2754             (?&stringcomp)
2755             )
2756             )
2757             |
2758             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2759             (?:
2760             (?&integercomp)
2761             )
2762             )
2763             |
2764             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
2765             (?:
2766             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
2767             [[:blank:]\h]+
2768             (?&word)
2769             )
2770             )
2771             |
2772             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
2773             (?:
2774             (?&word)
2775             [[:blank:]\h]+
2776             (?:
2777             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
2778             |
2779             \-(?ipmatch|strmatch|strcmatch|fnmatch)
2780             )
2781             [[:blank:]\h]+
2782             (?&word)
2783             )
2784             )
2785             |
2786             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
2787             (?:
2788             (?&word)
2789             [[:blank:]\h]+
2790             in
2791             [[:blank:]\h]+
2792             (?&listfunc)
2793             )
2794             )
2795             |
2796             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
2797             (?:
2798             (?&word)
2799             [[:blank:]\h]+
2800             [\=|\!]\~
2801             [[:blank:]\h]+
2802             $REGEXP->{regex}
2803             )
2804             )
2805             |
2806             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
2807             (?:
2808             (?&word)
2809             [[:blank:]\h]+
2810             in
2811             [[:blank:]\h]+
2812             \{
2813             [[:blank:]\h]*
2814             (?&words)
2815             [[:blank:]\h]*
2816             \}
2817             )
2818             )
2819             )
2820              
2821             (?
2822             (?:$Regexp::Common::Apache2::ap_true)
2823             |
2824             (?:$Regexp::Common::Apache2::ap_false)
2825             |
2826             (?:\![[:blank:]\h]*(?-1))
2827             |
2828             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
2829             |
2830             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
2831             |
2832             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
2833             (?:
2834             (?&comp)
2835             )
2836             )
2837             |
2838             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
2839             )
2840              
2841             (?
2842             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2843             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
2844             )
2845             )
2846              
2847             (?
2848             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2849             (?:
2850             (?(?&word))
2851             [[:blank:]\h]+
2852             \-?(?:eq|ne|lt|le|gt|ge)
2853             [[:blank:]\h]+
2854             (?(?&word))
2855             )
2856             )
2857             )
2858              
2859             (?
2860             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2861             (?:
2862             (?[a-zA-Z\_]\w+)
2863             \(
2864             [[:blank:]\h]*
2865             (?&words)
2866             [[:blank:]\h]*
2867             \)
2868             )
2869             )
2870             )
2871              
2872             (?
2873             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2874             (?:(?&substring)[[:blank:]\h]+(?&string))
2875             )
2876             |
2877             (?(?=(?:$TEXT|&variable))
2878             (?&substring)
2879             )
2880             )
2881              
2882             (?
2883             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2884             (?:
2885             (?(?&word))
2886             [[:blank:]\h]+
2887             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
2888             [[:blank:]\h]+
2889             (?(?&word))
2890             )
2891             )
2892             )
2893              
2894             (?
2895             (?:
2896             (?$REGEXP->{cstring})
2897             )
2898             |
2899             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
2900             (?:
2901             (?&variable)
2902             )
2903             )
2904             |
2905             (?(?=\$\{?${DIGIT}\}?\b)
2906             \$${DIGIT}
2907             )
2908             )
2909              
2910             (?
2911             (?:
2912             \%\{
2913             (?(?=${FUNCNAME}\:)
2914             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
2915             )
2916             \}
2917             )
2918             |
2919             (?:
2920             \%\{
2921             (?(?=${VARNAME}\})
2922             (?${VARNAME})
2923             )
2924             \}
2925             )
2926             )
2927              
2928             (?
2929             (?:
2930             $REGEXP->{digits}
2931             )
2932             |
2933             (?:
2934             \'
2935             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2936             (?(?&string))
2937             )
2938             \'
2939             )
2940             |
2941             (?:
2942             \"
2943             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
2944             (?(?&string))
2945             )
2946             \"
2947             )
2948             |
2949             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
2950             (?:
2951             (?&function)
2952             )
2953             )
2954             |
2955             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
2956             (?:
2957             (?(?&variable))
2958             )
2959             )
2960             |
2961             (?(?=\$\{?${DIGIT}\}?\b)
2962             \$${DIGIT}
2963             )
2964             |
2965             (?:
2966             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
2967             )
2968             )
2969              
2970             (?
2971             (?:
2972             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2973             (?&word)
2974             )
2975             [[:blank:]\h]*\,[[:blank:]\h]*
2976             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2977             (?&word)
2978             )
2979             )
2980             |
2981             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
2982             (?&word)
2983             )
2984             )
2985              
2986             )
2987             /x;
2988              
2989             ## Trunk regular expression
2990             @$TRUNK{qw( unary_op digit digits rebackref regpattern regflags regsep regex funcname varname text cstring )} =
2991 20         1802 @$REGEXP{qw( unary_op digit digits rebackref regpattern regflags regsep regex funcname varname text cstring )};
2992            
2993             ## cstring
2994             ## | variable
2995             ## | rebackref
2996 20         531 $TRUNK->{substring} = qr/
2997             (?
2998             (?:$TRUNK->{cstring})
2999             |
3000             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
3001             (?:
3002             (?&variable)
3003             )
3004             )
3005             )
3006             (?(DEFINE)
3007             (?
3008             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3009             (?:
3010             (?&stringcomp)
3011             )
3012             )
3013             |
3014             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3015             (?:
3016             (?&integercomp)
3017             )
3018             )
3019             |
3020             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
3021             (?:
3022             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
3023             [[:blank:]\h]+
3024             (?&word)
3025             )
3026             )
3027             |
3028             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
3029             (?:
3030             (?&word)
3031             [[:blank:]\h]+
3032             (?:
3033             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
3034             |
3035             \-(?ipmatch|strmatch|strcmatch|fnmatch)
3036             )
3037             [[:blank:]\h]+
3038             (?&word)
3039             )
3040             )
3041             |
3042             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
3043             (?:
3044             (?&word)
3045             [[:blank:]\h]+
3046             in
3047             [[:blank:]\h]+
3048             (?&listfunc)
3049             )
3050             )
3051             |
3052             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
3053             (?:
3054             (?&word)
3055             [[:blank:]\h]+
3056             [\=|\!]\~
3057             [[:blank:]\h]+
3058             $REGEXP->{regex}
3059             )
3060             )
3061             |
3062             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
3063             (?:
3064             (?&word)
3065             [[:blank:]\h]+
3066             in
3067             [[:blank:]\h]+
3068             \{
3069             [[:blank:]\h]*
3070             (?&list)
3071             [[:blank:]\h]*
3072             \}
3073             )
3074             )
3075             )
3076              
3077             (?
3078             (?:$Regexp::Common::Apache2::ap_true)
3079             |
3080             (?:$Regexp::Common::Apache2::ap_false)
3081             |
3082             (?:\![[:blank:]\h]*(?-1))
3083             |
3084             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
3085             |
3086             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
3087             |
3088             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
3089             (?:
3090             (?&comp)
3091             )
3092             )
3093             |
3094             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
3095             )
3096              
3097             (?
3098             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3099             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
3100             )
3101             )
3102              
3103             (?
3104             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3105             (?:
3106             (?(?&word))
3107             [[:blank:]\h]+
3108             \-?(?:eq|ne|lt|le|gt|ge)
3109             [[:blank:]\h]+
3110             (?(?&word))
3111             )
3112             )
3113             )
3114              
3115             (?
3116             join\(
3117             [[:blank:]\h]*
3118             (?:
3119             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
3120             |
3121             (?:(?&list))
3122             )
3123             [[:blank:]\h]*
3124             \)
3125             )
3126              
3127             (?
3128             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3129             (?:
3130             (?(?&listfunc))
3131             )
3132             )
3133             |
3134             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3135             (?:
3136             \{
3137             [[:blank:]\h]*
3138             (?(?&words))
3139             [[:blank:]\h]*
3140             \}
3141             )
3142             )
3143             |
3144             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
3145             (?:
3146             (?(?&split))
3147             )
3148             )
3149             |
3150             (?(?=\([[:blank:]\h]*)
3151             (?:
3152             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
3153             )
3154             )
3155             )
3156              
3157             (?
3158             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3159             (?:
3160             (?[a-zA-Z\_]\w+)
3161             \(
3162             [[:blank:]\h]*
3163             (?&words)
3164             [[:blank:]\h]*
3165             \)
3166             )
3167             )
3168             )
3169              
3170             (?
3171             (?:
3172             $REGEXP->{regex}
3173             |
3174             (?(?=(?:[s]${REGSEP}))
3175             (?®sub)
3176             )
3177             )
3178             )
3179              
3180             (?
3181             s(?${REGSEP})
3182             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
3183             \g{regsep}
3184             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
3185             \g{regsep}
3186             (?${REGFLAGS})?
3187             )
3188              
3189             (?
3190             split\(
3191             [[:blank:]\h]*
3192             (?(?®any))
3193             [[:blank:]\h]*\,[[:blank:]\h]*
3194             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3195             (?:
3196             (?&word)
3197             )
3198             |
3199             (?:
3200             (?&list)
3201             )
3202             )
3203             [[:blank:]\h]*
3204             \)
3205             )
3206              
3207             (?
3208             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable))[[:blank:]\h]+(?:$TEXT|&variable))
3209             (?:(?-1)[[:blank:]\h]+(?&substring_recur))
3210             )
3211             |
3212             (?(?=(?:$TEXT|&variable))
3213             (?&substring_recur) # Recurse on the entire substring regexp
3214             )
3215             )
3216             (?
3217             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3218             (?:
3219             (?(?&word))
3220             [[:blank:]\h]+
3221             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
3222             [[:blank:]\h]+
3223             (?(?&word))
3224             )
3225             )
3226             )
3227              
3228             (?
3229             sub\(
3230             [[:blank:]\h]*
3231             (?(?=(?:[s]${REGSEP}))
3232             (?®sub)
3233             )
3234             [[:blank:]\h]*
3235             \,
3236             [[:blank:]\h]*
3237             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3238             (?
3239             (?>(?&word))
3240             )
3241             )
3242             [[:blank:]\h]*
3243             \)
3244             )
3245              
3246             (?
3247             (?:$TRUNK->{cstring})
3248             |
3249             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
3250             (?:
3251             (?&variable)
3252             )
3253             )
3254             )
3255             (?
3256             (?:
3257             \%\{
3258             (?(?=${FUNCNAME}\:)
3259             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
3260             )
3261             \}
3262             )
3263             |
3264             (?:
3265             \%\{
3266             (?(?=${VARNAME}\})
3267             (?${VARNAME})
3268             )
3269             \}
3270             )
3271             |
3272             (?:
3273             \%\{\:
3274             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3275             (?(?&word))
3276             )
3277             \:\}
3278             )
3279             |
3280             (?:
3281             \%\{\:
3282             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
3283             (?&cond)
3284             )
3285             \:\}
3286             )
3287             |
3288             (?$REGEXP->{rebackref})
3289             )
3290              
3291             (?
3292             (?:
3293             $REGEXP->{digits}
3294             )
3295             |
3296             (?:
3297             \'
3298             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
3299             (?(?&string))
3300             )
3301             \'
3302             )
3303             |
3304             (?:
3305             \"
3306             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
3307             (?(?&string))
3308             )
3309             \"
3310             )
3311             |
3312             (?:
3313             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
3314             )
3315             |
3316             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
3317             (?&sub)
3318             )
3319             |
3320             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
3321             (?:
3322             (?&join)
3323             )
3324             )
3325             |
3326             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3327             (?:
3328             (?&function)
3329             )
3330             )
3331             |
3332             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3333             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
3334             )
3335             |
3336             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
3337             (?:
3338             (?(?&variable))
3339             )
3340             )
3341             )
3342              
3343             (?
3344             (?:
3345             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3346             (?&word)
3347             )
3348             [[:blank:]\h]*\,[[:blank:]\h]*
3349             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
3350             (?&list)
3351             )
3352             )
3353             |
3354             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3355             (?&word)
3356             )
3357             )
3358              
3359             )
3360             /x;
3361             ## substring
3362             ## | string substring
3363 20         1365 $TRUNK->{string} = qr/
3364             (?
3365             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable))[[:blank:]\h]+(?:$TEXT|&variable))
3366             (?:(?R)[[:blank:]\h]+(?&substring))
3367             )
3368             |
3369             (?(?=(?:$TEXT|&variable))
3370             (?&substring) # Recurse on the entire substring regexp
3371             )
3372             )
3373             (?(DEFINE)
3374             (?
3375             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3376             (?:
3377             (?&stringcomp)
3378             )
3379             )
3380             |
3381             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3382             (?:
3383             (?&integercomp)
3384             )
3385             )
3386             |
3387             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
3388             (?:
3389             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
3390             [[:blank:]\h]+
3391             (?&word)
3392             )
3393             )
3394             |
3395             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
3396             (?:
3397             (?&word)
3398             [[:blank:]\h]+
3399             (?:
3400             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
3401             |
3402             \-(?ipmatch|strmatch|strcmatch|fnmatch)
3403             )
3404             [[:blank:]\h]+
3405             (?&word)
3406             )
3407             )
3408             |
3409             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
3410             (?:
3411             (?&word)
3412             [[:blank:]\h]+
3413             in
3414             [[:blank:]\h]+
3415             (?&listfunc)
3416             )
3417             )
3418             |
3419             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
3420             (?:
3421             (?&word)
3422             [[:blank:]\h]+
3423             [\=|\!]\~
3424             [[:blank:]\h]+
3425             $REGEXP->{regex}
3426             )
3427             )
3428             |
3429             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
3430             (?:
3431             (?&word)
3432             [[:blank:]\h]+
3433             in
3434             [[:blank:]\h]+
3435             \{
3436             [[:blank:]\h]*
3437             (?&list)
3438             [[:blank:]\h]*
3439             \}
3440             )
3441             )
3442             )
3443              
3444             (?
3445             (?:$Regexp::Common::Apache2::ap_true)
3446             |
3447             (?:$Regexp::Common::Apache2::ap_false)
3448             |
3449             (?:\![[:blank:]\h]*(?-1))
3450             |
3451             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
3452             |
3453             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
3454             |
3455             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
3456             (?:
3457             (?&comp)
3458             )
3459             )
3460             |
3461             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
3462             )
3463              
3464             (?
3465             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3466             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
3467             )
3468             )
3469              
3470             (?
3471             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3472             (?:
3473             (?(?&word))
3474             [[:blank:]\h]+
3475             \-?(?:eq|ne|lt|le|gt|ge)
3476             [[:blank:]\h]+
3477             (?(?&word))
3478             )
3479             )
3480             )
3481              
3482             (?
3483             join\(
3484             [[:blank:]\h]*
3485             (?:
3486             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
3487             |
3488             (?:(?&list))
3489             )
3490             [[:blank:]\h]*
3491             \)
3492             )
3493              
3494             (?
3495             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3496             (?:
3497             (?(?&listfunc))
3498             )
3499             )
3500             |
3501             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3502             (?:
3503             \{
3504             [[:blank:]\h]*
3505             (?(?&words))
3506             [[:blank:]\h]*
3507             \}
3508             )
3509             )
3510             |
3511             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
3512             (?:
3513             (?(?&split))
3514             )
3515             )
3516             |
3517             (?(?=\([[:blank:]\h]*)
3518             (?:
3519             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
3520             )
3521             )
3522             )
3523              
3524             (?
3525             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3526             (?:
3527             (?[a-zA-Z\_]\w+)
3528             \(
3529             [[:blank:]\h]*
3530             (?&words)
3531             [[:blank:]\h]*
3532             \)
3533             )
3534             )
3535             )
3536              
3537             (?
3538             (?:
3539             $REGEXP->{regex}
3540             |
3541             (?(?=(?:[s]${REGSEP}))
3542             (?®sub)
3543             )
3544             )
3545             )
3546              
3547             (?
3548             s(?${REGSEP})
3549             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
3550             \g{regsep}
3551             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
3552             \g{regsep}
3553             (?${REGFLAGS})?
3554             )
3555              
3556             (?
3557             split\(
3558             [[:blank:]\h]*
3559             (?(?®any))
3560             [[:blank:]\h]*\,[[:blank:]\h]*
3561             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3562             (?:
3563             (?&word)
3564             )
3565             |
3566             (?:
3567             (?&list)
3568             )
3569             )
3570             [[:blank:]\h]*
3571             \)
3572             )
3573              
3574             (?
3575             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable))[[:blank:]\h]+(?:$TEXT|&variable))
3576             (?:(?-1)[[:blank:]\h]+(?&substring))
3577             )
3578             |
3579             (?(?=(?:$TEXT|&variable))
3580             (?&substring) # Recurse on the entire substring regexp
3581             )
3582             )
3583             (?
3584             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3585             (?:
3586             (?(?&word))
3587             [[:blank:]\h]+
3588             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
3589             [[:blank:]\h]+
3590             (?(?&word))
3591             )
3592             )
3593             )
3594              
3595             (?
3596             sub\(
3597             [[:blank:]\h]*
3598             (?(?=(?:[s]${REGSEP}))
3599             (?®sub)
3600             )
3601             [[:blank:]\h]*
3602             \,
3603             [[:blank:]\h]*
3604             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3605             (?
3606             (?>(?&word))
3607             )
3608             )
3609             [[:blank:]\h]*
3610             \)
3611             )
3612              
3613             (?
3614             (?:
3615             (?$REGEXP->{cstring})
3616             )
3617             |
3618             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
3619             (?:
3620             (?&variable)
3621             )
3622             )
3623             )
3624              
3625             (?
3626             (?:
3627             \%\{
3628             (?(?=${FUNCNAME}\:)
3629             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
3630             )
3631             \}
3632             )
3633             |
3634             (?:
3635             \%\{
3636             (?(?=${VARNAME}\})
3637             (?${VARNAME})
3638             )
3639             \}
3640             )
3641             |
3642             (?:
3643             \%\{\:
3644             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3645             (?(?&word))
3646             )
3647             \:\}
3648             )
3649             |
3650             (?:
3651             \%\{\:
3652             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
3653             (?&cond)
3654             )
3655             \:\}
3656             )
3657             |
3658             (?$REGEXP->{rebackref})
3659             )
3660              
3661             (?
3662             (?:
3663             $TRUNK->{digits}
3664             )
3665             |
3666             (?:
3667             \'
3668             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
3669             (?(?&string_recur))
3670             )
3671             \'
3672             )
3673             |
3674             (?:
3675             \"
3676             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
3677             (?(?&string_recur))
3678             )
3679             \"
3680             )
3681             |
3682             (?:
3683             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
3684             )
3685             |
3686             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
3687             (?&sub)
3688             )
3689             |
3690             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
3691             (?:
3692             (?&join)
3693             )
3694             )
3695             |
3696             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
3697             (?:
3698             (?&function)
3699             )
3700             )
3701             |
3702             (?:\((?-1)\)) # Recurse on the entire word regex
3703             |
3704             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
3705             (?:
3706             (?(?&variable))
3707             )
3708             )
3709             )
3710             (?
3711             (?:
3712             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3713             (?&word)
3714             )
3715             [[:blank:]\h]*\,[[:blank:]\h]*
3716             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
3717             (?&list)
3718             )
3719             )
3720             |
3721             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3722             (?&word)
3723             )
3724             )
3725              
3726             )/x;
3727              
3728             ## "true"
3729             ## | "false"
3730             ## | "!" cond
3731             ## | cond "&&" cond
3732             ## | cond "||" cond
3733             ## | "(" cond ")"
3734             ## | comp
3735 20         2648 $TRUNK->{cond} = qr/
3736             (?
3737             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
3738             (?:\([[:blank:]\h]*(?&cond_recur)[[:blank:]\h]*\))
3739             )
3740             |
3741             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+))) # Recurse on the entire comp regexp
3742             (?:
3743             (?&comp)
3744             )
3745             )
3746             |
3747             (?(?=\![[:blank:]\h]*(?:(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))) # Recurring the entire COND expression
3748             (?\![[:blank:]\h]*(?&cond_recur))
3749             )
3750             |
3751             (?(?=(?:.*?)[[:blank:]\h]*\&\&[[:blank:]\h]*(?:.*?))
3752             (?(?&cond_recur)[[:blank:]\h]*\&\&[[:blank:]\h]*(?&cond_recur))
3753             )
3754             |
3755             (?(?=(?:.*?)[[:blank:]\h]*\|\|[[:blank:]\h]*(?:.*?))
3756             (?(?&cond_recur)[[:blank:]\h]*\|\|[[:blank:]\h]*(?&cond_recur))
3757             )
3758             |
3759             (?(?=$Regexp::Common::Apache2::ap_true)
3760             (?$Regexp::Common::Apache2::ap_true)
3761             )
3762             |
3763             (?(?=$Regexp::Common::Apache2::ap_false)
3764             (?$Regexp::Common::Apache2::ap_false)
3765             )
3766             )
3767             (?(DEFINE)
3768             (?
3769             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3770             (?:
3771             (?&stringcomp)
3772             )
3773             )
3774             |
3775             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3776             (?:
3777             (?&integercomp)
3778             )
3779             )
3780             |
3781             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
3782             (?:
3783             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
3784             [[:blank:]\h]+
3785             (?&word)
3786             )
3787             )
3788             |
3789             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
3790             (?:
3791             (?&word)
3792             [[:blank:]\h]+
3793             (?:
3794             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
3795             |
3796             \-(?ipmatch|strmatch|strcmatch|fnmatch)
3797             )
3798             [[:blank:]\h]+
3799             (?&word)
3800             )
3801             )
3802             |
3803             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
3804             (?:
3805             (?&word)
3806             [[:blank:]\h]+
3807             in
3808             [[:blank:]\h]+
3809             (?&listfunc)
3810             )
3811             )
3812             |
3813             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
3814             (?:
3815             (?&word)
3816             [[:blank:]\h]+
3817             [\=|\!]\~
3818             [[:blank:]\h]+
3819             $REGEXP->{regex}
3820             )
3821             )
3822             |
3823             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
3824             (?:
3825             (?&word)
3826             [[:blank:]\h]+
3827             in
3828             [[:blank:]\h]+
3829             \{
3830             [[:blank:]\h]*
3831             (?&list)
3832             [[:blank:]\h]*
3833             \}
3834             )
3835             )
3836             )
3837              
3838             (?
3839             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
3840             (?:\([[:blank:]\h]*(?&cond_recur)[[:blank:]\h]*\))
3841             )
3842             |
3843             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
3844             (?:
3845             (?&comp)
3846             )
3847             )
3848             |
3849             (?(?=\![[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
3850             (?:\![[:blank:]\h]*(?&cond_recur))
3851             )
3852             |
3853             (?(?=(?:.*?)[[:blank:]\h]*\&\&[[:blank:]\h]*(?:.*?))
3854             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
3855             )
3856             |
3857             (?(?=(?:.*?)[[:blank:]\h]*\|\|[[:blank:]\h]*(?:.*?))
3858             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
3859             )
3860             |
3861             (?(?=$Regexp::Common::Apache2::ap_true)
3862             (?:$Regexp::Common::Apache2::ap_true)
3863             )
3864             |
3865             (?(?=$Regexp::Common::Apache2::ap_false)
3866             (?:$Regexp::Common::Apache2::ap_false)
3867             )
3868             )
3869             (?
3870             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3871             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
3872             )
3873             )
3874              
3875             (?
3876             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3877             (?:
3878             (?(?&word))
3879             [[:blank:]\h]+
3880             \-?(?:eq|ne|lt|le|gt|ge)
3881             [[:blank:]\h]+
3882             (?(?&word))
3883             )
3884             )
3885             )
3886              
3887             (?
3888             join\(
3889             [[:blank:]\h]*
3890             (?:
3891             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
3892             |
3893             (?:(?&list))
3894             )
3895             [[:blank:]\h]*
3896             \)
3897             )
3898              
3899             (?
3900             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3901             (?:
3902             (?(?&listfunc))
3903             )
3904             )
3905             |
3906             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3907             (?:
3908             \{
3909             [[:blank:]\h]*
3910             (?(?&words))
3911             [[:blank:]\h]*
3912             \}
3913             )
3914             )
3915             |
3916             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
3917             (?:
3918             (?(?&split))
3919             )
3920             )
3921             |
3922             (?(?=\([[:blank:]\h]*)
3923             (?:
3924             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
3925             )
3926             )
3927             )
3928              
3929             (?
3930             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3931             (?:
3932             (?[a-zA-Z\_]\w+)
3933             \(
3934             [[:blank:]\h]*
3935             (?&words)
3936             [[:blank:]\h]*
3937             \)
3938             )
3939             )
3940             )
3941              
3942             (?
3943             (?:
3944             $REGEXP->{regex}
3945             |
3946             (?(?=(?:[s]${REGSEP}))
3947             (?®sub)
3948             )
3949             )
3950             )
3951              
3952             (?
3953             s(?${REGSEP})
3954             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
3955             \g{regsep}
3956             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
3957             \g{regsep}
3958             (?${REGFLAGS})?
3959             )
3960              
3961             (?
3962             split\(
3963             [[:blank:]\h]*
3964             (?(?®any))
3965             [[:blank:]\h]*\,[[:blank:]\h]*
3966             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
3967             (?:
3968             (?&word)
3969             )
3970             |
3971             (?:
3972             (?&list)
3973             )
3974             )
3975             [[:blank:]\h]*
3976             \)
3977             )
3978              
3979             (?
3980             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
3981             (?:(?&substring)[[:blank:]\h]+(?&string))
3982             )
3983             |
3984             (?(?=(?:$TEXT|&variable))
3985             (?&substring)
3986             )
3987             )
3988              
3989             (?
3990             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
3991             (?:
3992             (?(?&word))
3993             [[:blank:]\h]+
3994             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
3995             [[:blank:]\h]+
3996             (?(?&word))
3997             )
3998             )
3999             )
4000              
4001             (?
4002             sub\(
4003             [[:blank:]\h]*
4004             (?(?=(?:[s]${REGSEP}))
4005             (?®sub)
4006             )
4007             [[:blank:]\h]*
4008             \,
4009             [[:blank:]\h]*
4010             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4011             (?
4012             (?>(?&word))
4013             )
4014             )
4015             [[:blank:]\h]*
4016             \)
4017             )
4018              
4019             (?
4020             (?:
4021             (?$REGEXP->{cstring})
4022             )
4023             |
4024             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
4025             (?:
4026             (?&variable)
4027             )
4028             )
4029             )
4030              
4031             (?
4032             (?:
4033             \%\{
4034             (?(?=${FUNCNAME}\:)
4035             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
4036             )
4037             \}
4038             )
4039             |
4040             (?:
4041             \%\{
4042             (?(?=${VARNAME}\})
4043             (?${VARNAME})
4044             )
4045             \}
4046             )
4047             |
4048             (?:
4049             \%\{\:
4050             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
4051             (?(?&word))
4052             )
4053             \:\}
4054             )
4055             |
4056             (?:
4057             \%\{\:
4058             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
4059             (?&cond_recur)
4060             )
4061             \:\}
4062             )
4063             |
4064             (?$TRUNK->{rebackref})
4065             )
4066             (?
4067             (?:
4068             $REGEXP->{digits}
4069             )
4070             |
4071             (?:
4072             \'
4073             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
4074             (?(?&string))
4075             )
4076             \'
4077             )
4078             |
4079             (?:
4080             \"
4081             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
4082             (?(?&string))
4083             )
4084             \"
4085             )
4086             |
4087             (?:
4088             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
4089             )
4090             |
4091             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
4092             (?&sub)
4093             )
4094             |
4095             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
4096             (?:
4097             (?&join)
4098             )
4099             )
4100             |
4101             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4102             (?:
4103             (?&function)
4104             )
4105             )
4106             |
4107             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4108             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
4109             )
4110             |
4111             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
4112             (?:
4113             (?(?&variable))
4114             )
4115             )
4116             )
4117              
4118             (?
4119             (?:
4120             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4121             (?&word)
4122             )
4123             [[:blank:]\h]*\,[[:blank:]\h]*
4124             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
4125             (?&list)
4126             )
4127             )
4128             |
4129             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4130             (?&word)
4131             )
4132             )
4133              
4134             )
4135             /xi;
4136              
4137             ## "s" regsep regpattern regsep string regsep [regflags]
4138 20         12137 $TRUNK->{regsub} = qr/
4139             (?
4140             s(?${REGSEP})
4141             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
4142             \g{regsep}
4143             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
4144             \g{regsep}
4145             (?${REGFLAGS})?
4146             )
4147             /x;
4148              
4149             ## regex | regsub
4150 20         6026 $TRUNK->{regany} = qr/
4151             (?
4152             (?:
4153             (?$TRUNK->{regex})
4154             |
4155             (?(?=(?:[s]${REGSEP}))
4156             (?(?®sub))
4157             )
4158             )
4159             )
4160             (?(DEFINE)
4161             (?
4162             s(?${REGSEP})
4163             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
4164             \g{regsep}
4165             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
4166             \g{regsep}
4167             (?${REGFLAGS})?
4168             )
4169              
4170             )
4171             /x;
4172              
4173             ## "sub" ["("] regsub "," word [")"]
4174 20         766 $TRUNK->{sub} = qr/
4175             (?
4176             sub\(
4177             [[:blank:]\h]*
4178             (?(?®sub))
4179             [[:blank:]\h]*
4180             \,
4181             [[:blank:]\h]*
4182             (?(?=(?:\([[:blank:]\h]*)?(?:[0-9]|(?:["']\w)|sub|join|${FUNCNAME}|\%\{))
4183             (?
4184             (?&word)
4185             )
4186             )
4187             [[:blank:]\h]*
4188             \)
4189             )
4190             (?(DEFINE)
4191             (?
4192             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4193             (?:
4194             (?&stringcomp)
4195             )
4196             )
4197             |
4198             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4199             (?:
4200             (?&integercomp)
4201             )
4202             )
4203             |
4204             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
4205             (?:
4206             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
4207             [[:blank:]\h]+
4208             (?&word)
4209             )
4210             )
4211             |
4212             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
4213             (?:
4214             (?&word)
4215             [[:blank:]\h]+
4216             (?:
4217             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
4218             |
4219             \-(?ipmatch|strmatch|strcmatch|fnmatch)
4220             )
4221             [[:blank:]\h]+
4222             (?&word)
4223             )
4224             )
4225             |
4226             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
4227             (?:
4228             (?&word)
4229             [[:blank:]\h]+
4230             in
4231             [[:blank:]\h]+
4232             (?&listfunc)
4233             )
4234             )
4235             |
4236             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
4237             (?:
4238             (?&word)
4239             [[:blank:]\h]+
4240             [\=|\!]\~
4241             [[:blank:]\h]+
4242             $REGEXP->{regex}
4243             )
4244             )
4245             |
4246             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
4247             (?:
4248             (?&word)
4249             [[:blank:]\h]+
4250             in
4251             [[:blank:]\h]+
4252             \{
4253             [[:blank:]\h]*
4254             (?&list)
4255             [[:blank:]\h]*
4256             \}
4257             )
4258             )
4259             )
4260              
4261             (?
4262             (?:$Regexp::Common::Apache2::ap_true)
4263             |
4264             (?:$Regexp::Common::Apache2::ap_false)
4265             |
4266             (?:\![[:blank:]\h]*(?-1))
4267             |
4268             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
4269             |
4270             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
4271             |
4272             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
4273             (?:
4274             (?&comp)
4275             )
4276             )
4277             |
4278             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
4279             )
4280              
4281             (?
4282             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4283             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
4284             )
4285             )
4286              
4287             (?
4288             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4289             (?:
4290             (?(?&word))
4291             [[:blank:]\h]+
4292             \-?(?:eq|ne|lt|le|gt|ge)
4293             [[:blank:]\h]+
4294             (?(?&word))
4295             )
4296             )
4297             )
4298              
4299             (?
4300             join\(
4301             [[:blank:]\h]*
4302             (?:
4303             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
4304             |
4305             (?:(?&list))
4306             )
4307             [[:blank:]\h]*
4308             \)
4309             )
4310              
4311             (?
4312             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4313             (?:
4314             (?(?&listfunc))
4315             )
4316             )
4317             |
4318             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4319             (?:
4320             \{
4321             [[:blank:]\h]*
4322             (?(?&words))
4323             [[:blank:]\h]*
4324             \}
4325             )
4326             )
4327             |
4328             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
4329             (?:
4330             (?(?&split))
4331             )
4332             )
4333             |
4334             (?(?=\([[:blank:]\h]*)
4335             (?:
4336             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
4337             )
4338             )
4339             )
4340              
4341             (?
4342             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4343             (?:
4344             (?[a-zA-Z\_]\w+)
4345             \(
4346             [[:blank:]\h]*
4347             (?&words)
4348             [[:blank:]\h]*
4349             \)
4350             )
4351             )
4352             )
4353              
4354             (?
4355             (?:
4356             $REGEXP->{regex}
4357             |
4358             (?(?=(?:[s]${REGSEP}))
4359             (?®sub)
4360             )
4361             )
4362             )
4363              
4364             (?
4365             s(?${REGSEP})
4366             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
4367             \g{regsep}
4368             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
4369             \g{regsep}
4370             (?${REGFLAGS})?
4371             )
4372              
4373             (?
4374             split\(
4375             [[:blank:]\h]*
4376             (?(?®any))
4377             [[:blank:]\h]*\,[[:blank:]\h]*
4378             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4379             (?:
4380             (?&word)
4381             )
4382             |
4383             (?:
4384             (?&list)
4385             )
4386             )
4387             [[:blank:]\h]*
4388             \)
4389             )
4390              
4391             (?
4392             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
4393             (?:(?&substring)[[:blank:]\h]+(?&string))
4394             )
4395             |
4396             (?(?=(?:$TEXT|&variable))
4397             (?&substring)
4398             )
4399             )
4400              
4401             (?
4402             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4403             (?:
4404             (?(?&word))
4405             [[:blank:]\h]+
4406             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
4407             [[:blank:]\h]+
4408             (?(?&word))
4409             )
4410             )
4411             )
4412              
4413             (?
4414             sub\(
4415             [[:blank:]\h]*
4416             (?(?®sub))
4417             [[:blank:]\h]*
4418             \,
4419             [[:blank:]\h]*
4420             (?(?=(?:\([[:blank:]\h]*)?(?:[0-9]|(?:["']\w)|sub|join|${FUNCNAME}|\%\{))
4421             (?
4422             (?&word)
4423             ) # Recurse on the entire word regexp
4424             )
4425             [[:blank:]\h]*
4426             \)
4427             )
4428             (?
4429             (?:
4430             (?$REGEXP->{cstring})
4431             )
4432             |
4433             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
4434             (?:
4435             (?&variable)
4436             )
4437             )
4438             )
4439              
4440             (?
4441             (?:
4442             \%\{
4443             (?(?=${FUNCNAME}\:)
4444             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
4445             )
4446             \}
4447             )
4448             |
4449             (?:
4450             \%\{
4451             (?(?=${VARNAME}\})
4452             (?${VARNAME})
4453             )
4454             \}
4455             )
4456             |
4457             (?:
4458             \%\{\:
4459             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4460             (?(?&word))
4461             )
4462             \:\}
4463             )
4464             |
4465             (?:
4466             \%\{\:
4467             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
4468             (?&cond)
4469             )
4470             \:\}
4471             )
4472             |
4473             (?$REGEXP->{rebackref})
4474             )
4475              
4476             (?
4477             (?:
4478             $TRUNK->{digits}
4479             )
4480             |
4481             (?:
4482             \'
4483             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
4484             (?(?&string))
4485             )
4486             \'
4487             )
4488             |
4489             (?:
4490             \"
4491             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
4492             (?(?&string))
4493             )
4494             \"
4495             )
4496             |
4497             (?:
4498             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
4499             )
4500             |
4501             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
4502             (?&sub_recur)
4503             )
4504             |
4505             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
4506             (?:
4507             (?&join)
4508             )
4509             )
4510             |
4511             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
4512             (?:
4513             (?&function)
4514             )
4515             )
4516             |
4517             (?:\((?-1)\)) # Recurse on the entire word regex
4518             |
4519             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
4520             (?:
4521             (?(?&variable))
4522             )
4523             )
4524             )
4525             (?
4526             (?:
4527             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4528             (?&word)
4529             )
4530             [[:blank:]\h]*\,[[:blank:]\h]*
4531             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
4532             (?&list)
4533             )
4534             )
4535             |
4536             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4537             (?&word)
4538             )
4539             )
4540              
4541             )
4542             /x;
4543              
4544             ## funcname "(" words ")"
4545             ## -> Same as LISTFUNC
4546 20         1462 $TRUNK->{function} = qr/
4547             (?
4548             (?(?=[a-zA-Z\_]\w+\()
4549             (?[a-zA-Z\_]\w+)\([[:blank:]\h]*(?(?&words))[[:blank:]\h]*\)
4550             )
4551             )
4552             (?(DEFINE)
4553             (?
4554             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4555             (?:
4556             (?&stringcomp)
4557             )
4558             )
4559             |
4560             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4561             (?:
4562             (?&integercomp)
4563             )
4564             )
4565             |
4566             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
4567             (?:
4568             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
4569             [[:blank:]\h]+
4570             (?&word)
4571             )
4572             )
4573             |
4574             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
4575             (?:
4576             (?&word)
4577             [[:blank:]\h]+
4578             (?:
4579             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
4580             |
4581             \-(?ipmatch|strmatch|strcmatch|fnmatch)
4582             )
4583             [[:blank:]\h]+
4584             (?&word)
4585             )
4586             )
4587             |
4588             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
4589             (?:
4590             (?&word)
4591             [[:blank:]\h]+
4592             in
4593             [[:blank:]\h]+
4594             (?&listfunc)
4595             )
4596             )
4597             |
4598             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
4599             (?:
4600             (?&word)
4601             [[:blank:]\h]+
4602             [\=|\!]\~
4603             [[:blank:]\h]+
4604             $REGEXP->{regex}
4605             )
4606             )
4607             |
4608             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
4609             (?:
4610             (?&word)
4611             [[:blank:]\h]+
4612             in
4613             [[:blank:]\h]+
4614             \{
4615             [[:blank:]\h]*
4616             (?&list)
4617             [[:blank:]\h]*
4618             \}
4619             )
4620             )
4621             )
4622              
4623             (?
4624             (?:$Regexp::Common::Apache2::ap_true)
4625             |
4626             (?:$Regexp::Common::Apache2::ap_false)
4627             |
4628             (?:\![[:blank:]\h]*(?-1))
4629             |
4630             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
4631             |
4632             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
4633             |
4634             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
4635             (?:
4636             (?&comp)
4637             )
4638             )
4639             |
4640             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
4641             )
4642              
4643             (?
4644             (?(?=[a-zA-Z\_]\w+\()
4645             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\) # R recurring on the entire words regexp
4646             )
4647             )
4648             (?
4649             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4650             (?:
4651             (?(?&word))
4652             [[:blank:]\h]+
4653             \-?(?:eq|ne|lt|le|gt|ge)
4654             [[:blank:]\h]+
4655             (?(?&word))
4656             )
4657             )
4658             )
4659              
4660             (?
4661             join\(
4662             [[:blank:]\h]*
4663             (?:
4664             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
4665             |
4666             (?:(?&list))
4667             )
4668             [[:blank:]\h]*
4669             \)
4670             )
4671              
4672             (?
4673             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4674             (?:
4675             (?(?&listfunc))
4676             )
4677             )
4678             |
4679             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4680             (?:
4681             \{
4682             [[:blank:]\h]*
4683             (?(?&words))
4684             [[:blank:]\h]*
4685             \}
4686             )
4687             )
4688             |
4689             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
4690             (?:
4691             (?(?&split))
4692             )
4693             )
4694             |
4695             (?(?=\([[:blank:]\h]*)
4696             (?:
4697             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
4698             )
4699             )
4700             )
4701              
4702             (?
4703             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4704             (?:
4705             (?[a-zA-Z\_]\w+)
4706             \(
4707             [[:blank:]\h]*
4708             (?&words)
4709             [[:blank:]\h]*
4710             \)
4711             )
4712             )
4713             )
4714              
4715             (?
4716             (?:
4717             $REGEXP->{regex}
4718             |
4719             (?(?=(?:[s]${REGSEP}))
4720             (?®sub)
4721             )
4722             )
4723             )
4724              
4725             (?
4726             s(?${REGSEP})
4727             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
4728             \g{regsep}
4729             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
4730             \g{regsep}
4731             (?${REGFLAGS})?
4732             )
4733              
4734             (?
4735             split\(
4736             [[:blank:]\h]*
4737             (?(?®any))
4738             [[:blank:]\h]*\,[[:blank:]\h]*
4739             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4740             (?:
4741             (?&word)
4742             )
4743             |
4744             (?:
4745             (?&list)
4746             )
4747             )
4748             [[:blank:]\h]*
4749             \)
4750             )
4751              
4752             (?
4753             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
4754             (?:(?&substring)[[:blank:]\h]+(?&string))
4755             )
4756             |
4757             (?(?=(?:$TEXT|&variable))
4758             (?&substring)
4759             )
4760             )
4761              
4762             (?
4763             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
4764             (?:
4765             (?(?&word))
4766             [[:blank:]\h]+
4767             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
4768             [[:blank:]\h]+
4769             (?(?&word))
4770             )
4771             )
4772             )
4773              
4774             (?
4775             sub\(
4776             [[:blank:]\h]*
4777             (?(?=(?:[s]${REGSEP}))
4778             (?®sub)
4779             )
4780             [[:blank:]\h]*
4781             \,
4782             [[:blank:]\h]*
4783             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4784             (?
4785             (?>(?&word))
4786             )
4787             )
4788             [[:blank:]\h]*
4789             \)
4790             )
4791              
4792             (?
4793             (?:
4794             (?$REGEXP->{cstring})
4795             )
4796             |
4797             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
4798             (?:
4799             (?&variable)
4800             )
4801             )
4802             )
4803              
4804             (?
4805             (?:
4806             \%\{
4807             (?(?=${FUNCNAME}\:)
4808             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
4809             )
4810             \}
4811             )
4812             |
4813             (?:
4814             \%\{
4815             (?(?=${VARNAME}\})
4816             (?${VARNAME})
4817             )
4818             \}
4819             )
4820             |
4821             (?:
4822             \%\{\:
4823             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4824             (?(?&word))
4825             )
4826             \:\}
4827             )
4828             |
4829             (?:
4830             \%\{\:
4831             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
4832             (?&cond)
4833             )
4834             \:\}
4835             )
4836             |
4837             (?$REGEXP->{rebackref})
4838             )
4839              
4840             (?
4841             (?:
4842             $TRUNK->{digits}
4843             )
4844             |
4845             (?:
4846             \'
4847             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
4848             (?(?&string))
4849             )
4850             \'
4851             )
4852             |
4853             (?:
4854             \"
4855             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
4856             (?(?&string))
4857             )
4858             \"
4859             )
4860             |
4861             (?:
4862             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
4863             )
4864             |
4865             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
4866             (?&sub)
4867             )
4868             |
4869             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
4870             (?:
4871             (?&join)
4872             )
4873             )
4874             |
4875             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
4876             (?:
4877             (?&function_recur)
4878             )
4879             )
4880             |
4881             (?:\((?-1)\)) # Recurse on the entire word regex
4882             |
4883             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
4884             (?:
4885             (?(?&variable))
4886             )
4887             )
4888             )
4889             (?
4890             (?:
4891             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4892             (?&word)
4893             )
4894             [[:blank:]\h]*\,[[:blank:]\h]*
4895             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
4896             (?&list)
4897             )
4898             )
4899             |
4900             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4901             (?&word)
4902             )
4903             )
4904              
4905             )
4906             /x;
4907              
4908             ## listfuncname "(" words ")"
4909             ## Use recursion at execution phase for words because it contains dependencies -> list -> listfunc
4910             #(??{$TRUNK->{words}})
4911 20         1313 $TRUNK->{listfunc} = qr/
4912             (?
4913             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
4914             (?:
4915             (?[a-zA-Z\_]\w+)
4916             \(
4917             [[:blank:]\h]*
4918             (?(?&words))
4919             [[:blank:]\h]*
4920             \)
4921             )
4922             )
4923             )
4924             (?(DEFINE)
4925             (?
4926             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))(?&stringcomp))
4927             |
4928             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))(?&integercomp))
4929             |
4930             (?:
4931             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
4932             [[:blank:]\h]+
4933             (?&word) # Recurse on the entire word regexp
4934             )
4935             |
4936             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
4937             (?&word) # Recurse on the entire word regexp
4938             [[:blank:]\h]+
4939             (?:
4940             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
4941             |
4942             \-(?ipmatch|strmatch|strcmatch|fnmatch)
4943             )
4944             [[:blank:]\h]+
4945             (?&word) # Recurse on the entire word regexp
4946             )
4947             |
4948             (?(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
4949             (?&word) # Recurse on the entire word regexp
4950             [[:blank:]\h]+
4951             in
4952             [[:blank:]\h]+
4953             (?&listfunc_recur)
4954             )
4955             |
4956             (?(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
4957             (?&word) # Recurse on the entire word regexp
4958             [[:blank:]\h]+
4959             [\=|\!]\~
4960             [[:blank:]\h]+
4961             $TRUNK->{regex}
4962             )
4963             |
4964             (?(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
4965             (?&word) # Recurse on the entire word regexp
4966             [[:blank:]\h]+
4967             in
4968             [[:blank:]\h]+
4969             \{
4970             [[:blank:]\h]*
4971             (?&list)
4972             [[:blank:]\h]*
4973             \}
4974             )
4975             )
4976             (?
4977             (?:$Regexp::Common::Apache2::ap_true)
4978             |
4979             (?:$Regexp::Common::Apache2::ap_false)
4980             |
4981             (?:\![[:blank:]\h]*(?-1))
4982             |
4983             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
4984             |
4985             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
4986             |
4987             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
4988             (?:
4989             (?&comp)
4990             )
4991             )
4992             |
4993             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
4994             )
4995              
4996             (?
4997             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
4998             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
4999             )
5000             )
5001              
5002             (?
5003             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5004             (?:
5005             (?(?&word))
5006             [[:blank:]\h]+
5007             \-?(?:eq|ne|lt|le|gt|ge)
5008             [[:blank:]\h]+
5009             (?(?&word))
5010             )
5011             )
5012             )
5013              
5014             (?
5015             join\(
5016             [[:blank:]\h]*
5017             (?:
5018             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
5019             |
5020             (?:(?&list))
5021             )
5022             [[:blank:]\h]*
5023             \)
5024             )
5025              
5026             (?
5027             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
5028             (?:
5029             (?(?&listfunc_recur))
5030             )
5031             )
5032             |
5033             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
5034             (?:
5035             \{
5036             [[:blank:]\h]*
5037             (?(?&words)) # R recurring on the entire words regexp
5038             [[:blank:]\h]*
5039             \}
5040             )
5041             )
5042             |
5043             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
5044             (?:
5045             (?(?&split))
5046             )
5047             )
5048             |
5049             (?(?=\([[:blank:]\h]*)
5050             (?:
5051             \([[:blank:]\h]*(?-1)[[:blank:]\h]*\)
5052             )
5053             )
5054             )
5055             (?
5056             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
5057             (?:
5058             (?[a-zA-Z\_]\w+)
5059             \(
5060             [[:blank:]\h]*
5061             (?&words)
5062             [[:blank:]\h]*
5063             \)
5064             )
5065             )
5066             )
5067             (?
5068             (?:
5069             $REGEXP->{regex}
5070             |
5071             (?(?=(?:[s]${REGSEP}))
5072             (?®sub)
5073             )
5074             )
5075             )
5076              
5077             (?
5078             s(?${REGSEP})
5079             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
5080             \g{regsep}
5081             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
5082             \g{regsep}
5083             (?${REGFLAGS})?
5084             )
5085              
5086             (?
5087             split\(
5088             [[:blank:]\h]*
5089             (?(?®any))
5090             [[:blank:]\h]*\,[[:blank:]\h]*
5091             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5092             (?:
5093             (?&word)
5094             )
5095             |
5096             (?:
5097             (?&list)
5098             )
5099             )
5100             [[:blank:]\h]*
5101             \)
5102             )
5103              
5104             (?
5105             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
5106             (?:(?&substring)[[:blank:]\h]+(?&string))
5107             )
5108             |
5109             (?(?=(?:$TEXT|&variable))
5110             (?&substring)
5111             )
5112             )
5113              
5114             (?
5115             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5116             (?:
5117             (?(?&word))
5118             [[:blank:]\h]+
5119             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
5120             [[:blank:]\h]+
5121             (?(?&word))
5122             )
5123             )
5124             )
5125              
5126             (?
5127             sub\(
5128             [[:blank:]\h]*
5129             (?(?=(?:[s]${REGSEP}))
5130             (?®sub)
5131             )
5132             [[:blank:]\h]*
5133             \,
5134             [[:blank:]\h]*
5135             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5136             (?
5137             (?>(?&word))
5138             )
5139             )
5140             [[:blank:]\h]*
5141             \)
5142             )
5143              
5144             (?
5145             (?:
5146             (?$REGEXP->{cstring})
5147             )
5148             |
5149             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
5150             (?:
5151             (?&variable)
5152             )
5153             )
5154             )
5155              
5156             (?
5157             (?:
5158             \%\{
5159             (?(?=${FUNCNAME}\:)
5160             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
5161             )
5162             \}
5163             )
5164             |
5165             (?:
5166             \%\{
5167             (?(?=${VARNAME}\})
5168             (?${VARNAME})
5169             )
5170             \}
5171             )
5172             |
5173             (?:
5174             \%\{\:
5175             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5176             (?(?&word))
5177             )
5178             \:\}
5179             )
5180             |
5181             (?:
5182             \%\{\:
5183             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
5184             (?&cond)
5185             )
5186             \:\}
5187             )
5188             |
5189             (?$REGEXP->{rebackref})
5190             )
5191              
5192             (?
5193             (?:
5194             $REGEXP->{digits}
5195             )
5196             |
5197             (?:
5198             \'
5199             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
5200             (?(?&string))
5201             )
5202             \'
5203             )
5204             |
5205             (?:
5206             \"
5207             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
5208             (?(?&string))
5209             )
5210             \"
5211             )
5212             |
5213             (?:
5214             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
5215             )
5216             |
5217             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
5218             (?&sub)
5219             )
5220             |
5221             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
5222             (?:
5223             (?&join)
5224             )
5225             )
5226             |
5227             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5228             (?:
5229             (?&function)
5230             )
5231             )
5232             |
5233             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5234             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
5235             )
5236             |
5237             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
5238             (?:
5239             (?(?&variable))
5240             )
5241             )
5242             )
5243              
5244             (?
5245             (?:
5246             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5247             (?&word)
5248             )
5249             [[:blank:]\h]*\,[[:blank:]\h]*
5250             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
5251             (?&list)
5252             )
5253             )
5254             |
5255             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5256             (?&word)
5257             )
5258             )
5259              
5260             )
5261             /x;
5262              
5263             ## "split" ["("] regany "," list [")"]
5264             ## | "split" ["("] regany "," word [")"]
5265 20         1275 $TRUNK->{split} = qr/
5266             (?
5267             split\(
5268             [[:blank:]\h]*
5269             (?(?®any))
5270             [[:blank:]\h]*\,[[:blank:]\h]*
5271             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
5272             (?:
5273             (?(?&word))
5274             )
5275             |
5276             (?:
5277             (?(?&list))
5278             )
5279             )
5280             [[:blank:]\h]*
5281             \)
5282             )
5283             (?(DEFINE)
5284             (?
5285             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5286             (?:
5287             (?&stringcomp)
5288             )
5289             )
5290             |
5291             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5292             (?:
5293             (?&integercomp)
5294             )
5295             )
5296             |
5297             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
5298             (?:
5299             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
5300             [[:blank:]\h]+
5301             (?&word)
5302             )
5303             )
5304             |
5305             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
5306             (?:
5307             (?&word)
5308             [[:blank:]\h]+
5309             (?:
5310             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
5311             |
5312             \-(?ipmatch|strmatch|strcmatch|fnmatch)
5313             )
5314             [[:blank:]\h]+
5315             (?&word)
5316             )
5317             )
5318             |
5319             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
5320             (?:
5321             (?&word)
5322             [[:blank:]\h]+
5323             in
5324             [[:blank:]\h]+
5325             (?&listfunc)
5326             )
5327             )
5328             |
5329             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
5330             (?:
5331             (?&word)
5332             [[:blank:]\h]+
5333             [\=|\!]\~
5334             [[:blank:]\h]+
5335             $REGEXP->{regex}
5336             )
5337             )
5338             |
5339             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
5340             (?:
5341             (?&word)
5342             [[:blank:]\h]+
5343             in
5344             [[:blank:]\h]+
5345             \{
5346             [[:blank:]\h]*
5347             (?&list)
5348             [[:blank:]\h]*
5349             \}
5350             )
5351             )
5352             )
5353              
5354             (?
5355             (?:$Regexp::Common::Apache2::ap_true)
5356             |
5357             (?:$Regexp::Common::Apache2::ap_false)
5358             |
5359             (?:\![[:blank:]\h]*(?-1))
5360             |
5361             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
5362             |
5363             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
5364             |
5365             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
5366             (?:
5367             (?&comp)
5368             )
5369             )
5370             |
5371             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
5372             )
5373              
5374             (?
5375             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5376             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
5377             )
5378             )
5379              
5380             (?
5381             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5382             (?:
5383             (?(?&word))
5384             [[:blank:]\h]+
5385             \-?(?:eq|ne|lt|le|gt|ge)
5386             [[:blank:]\h]+
5387             (?(?&word))
5388             )
5389             )
5390             )
5391              
5392             (?
5393             join\(
5394             [[:blank:]\h]*
5395             (?:
5396             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
5397             |
5398             (?:(?&list))
5399             )
5400             [[:blank:]\h]*
5401             \)
5402             )
5403              
5404             (?
5405             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
5406             (?:
5407             (?(?&listfunc))
5408             )
5409             )
5410             |
5411             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
5412             (?:
5413             \{
5414             [[:blank:]\h]*
5415             (?(?&words))
5416             [[:blank:]\h]*
5417             \}
5418             )
5419             )
5420             |
5421             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
5422             (?:
5423             (?(?&split_recur))
5424             )
5425             )
5426             |
5427             (?(?=\([[:blank:]\h]*)
5428             (?:
5429             \([[:blank:]\h]*(?-1)[[:blank:]\h]*\)
5430             )
5431             )
5432             )
5433             (?
5434             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5435             (?:
5436             (?[a-zA-Z\_]\w+)
5437             \(
5438             [[:blank:]\h]*
5439             (?&words)
5440             [[:blank:]\h]*
5441             \)
5442             )
5443             )
5444             )
5445              
5446             (?
5447             (?:
5448             $REGEXP->{regex}
5449             |
5450             (?(?=(?:[s]${REGSEP}))
5451             (?®sub)
5452             )
5453             )
5454             )
5455              
5456             (?
5457             s(?${REGSEP})
5458             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
5459             \g{regsep}
5460             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
5461             \g{regsep}
5462             (?${REGFLAGS})?
5463             )
5464              
5465             (?
5466             split\(
5467             [[:blank:]\h]*
5468             (?(?®any))
5469             [[:blank:]\h]*\,[[:blank:]\h]*
5470             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
5471             (?:
5472             (?&word)
5473             )
5474             |
5475             (?:
5476             (?&list)
5477             )
5478             )
5479             [[:blank:]\h]*
5480             \)
5481             )
5482             (?
5483             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
5484             (?:(?&substring)[[:blank:]\h]+(?&string))
5485             )
5486             |
5487             (?(?=(?:$TEXT|&variable))
5488             (?&substring)
5489             )
5490             )
5491              
5492             (?
5493             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5494             (?:
5495             (?(?&word))
5496             [[:blank:]\h]+
5497             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
5498             [[:blank:]\h]+
5499             (?(?&word))
5500             )
5501             )
5502             )
5503              
5504             (?
5505             sub\(
5506             [[:blank:]\h]*
5507             (?(?=(?:[s]${REGSEP}))
5508             (?®sub)
5509             )
5510             [[:blank:]\h]*
5511             \,
5512             [[:blank:]\h]*
5513             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5514             (?
5515             (?>(?&word))
5516             )
5517             )
5518             [[:blank:]\h]*
5519             \)
5520             )
5521              
5522             (?
5523             (?:
5524             (?$REGEXP->{cstring})
5525             )
5526             |
5527             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
5528             (?:
5529             (?&variable)
5530             )
5531             )
5532             )
5533              
5534             (?
5535             (?:
5536             \%\{
5537             (?(?=${FUNCNAME}\:)
5538             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
5539             )
5540             \}
5541             )
5542             |
5543             (?:
5544             \%\{
5545             (?(?=${VARNAME}\})
5546             (?${VARNAME})
5547             )
5548             \}
5549             )
5550             |
5551             (?:
5552             \%\{\:
5553             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5554             (?(?&word))
5555             )
5556             \:\}
5557             )
5558             |
5559             (?:
5560             \%\{\:
5561             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
5562             (?&cond)
5563             )
5564             \:\}
5565             )
5566             |
5567             (?$REGEXP->{rebackref})
5568             )
5569              
5570             (?
5571             (?:
5572             $REGEXP->{digits}
5573             )
5574             |
5575             (?:
5576             \'
5577             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
5578             (?(?&string))
5579             )
5580             \'
5581             )
5582             |
5583             (?:
5584             \"
5585             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
5586             (?(?&string))
5587             )
5588             \"
5589             )
5590             |
5591             (?:
5592             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
5593             )
5594             |
5595             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
5596             (?&sub)
5597             )
5598             |
5599             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
5600             (?:
5601             (?&join)
5602             )
5603             )
5604             |
5605             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5606             (?:
5607             (?&function)
5608             )
5609             )
5610             |
5611             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5612             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
5613             )
5614             |
5615             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
5616             (?:
5617             (?(?&variable))
5618             )
5619             )
5620             )
5621              
5622             (?
5623             (?:
5624             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5625             (?&word)
5626             )
5627             [[:blank:]\h]*\,[[:blank:]\h]*
5628             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
5629             (?&list)
5630             )
5631             )
5632             |
5633             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5634             (?&word)
5635             )
5636             )
5637              
5638             )
5639             /x;
5640              
5641             ## split
5642             ## | listfunc
5643             ## | "{" words "}"
5644             ## | "(" list ")"
5645 20         1386 $TRUNK->{list} = qr/
5646             (?
5647             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
5648             (?:
5649             (?(?&listfunc))
5650             )
5651             )
5652             |
5653             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
5654             (?:
5655             \{
5656             [[:blank:]\h]*
5657             (?(?&words))
5658             [[:blank:]\h]*
5659             \}
5660             )
5661             )
5662             |
5663             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
5664             (?:
5665             (?(?&split))
5666             )
5667             )
5668             |
5669             (?(?=\([[:blank:]\h]*)
5670             (?:
5671             \([[:blank:]\h]*(?(?&list_recur))[[:blank:]\h]*\)
5672             )
5673             )
5674             )
5675             (?(DEFINE)
5676             (?
5677             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5678             (?:
5679             (?&stringcomp)
5680             )
5681             )
5682             |
5683             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5684             (?:
5685             (?&integercomp)
5686             )
5687             )
5688             |
5689             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
5690             (?:
5691             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
5692             [[:blank:]\h]+
5693             (?&word)
5694             )
5695             )
5696             |
5697             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
5698             (?:
5699             (?&word)
5700             [[:blank:]\h]+
5701             (?:
5702             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
5703             |
5704             \-(?ipmatch|strmatch|strcmatch|fnmatch)
5705             )
5706             [[:blank:]\h]+
5707             (?&word)
5708             )
5709             )
5710             |
5711             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
5712             (?:
5713             (?&word)
5714             [[:blank:]\h]+
5715             in
5716             [[:blank:]\h]+
5717             (?&listfunc)
5718             )
5719             )
5720             |
5721             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
5722             (?:
5723             (?&word)
5724             [[:blank:]\h]+
5725             [\=|\!]\~
5726             [[:blank:]\h]+
5727             $REGEXP->{regex}
5728             )
5729             )
5730             |
5731             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
5732             (?:
5733             (?&word)
5734             [[:blank:]\h]+
5735             in
5736             [[:blank:]\h]+
5737             \{
5738             [[:blank:]\h]*
5739             (?&list)
5740             [[:blank:]\h]*
5741             \}
5742             )
5743             )
5744             )
5745              
5746             (?
5747             (?:$Regexp::Common::Apache2::ap_true)
5748             |
5749             (?:$Regexp::Common::Apache2::ap_false)
5750             |
5751             (?:\![[:blank:]\h]*(?-1))
5752             |
5753             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
5754             |
5755             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
5756             |
5757             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
5758             (?:
5759             (?&comp)
5760             )
5761             )
5762             |
5763             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
5764             )
5765              
5766             (?
5767             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5768             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
5769             )
5770             )
5771              
5772             (?
5773             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5774             (?:
5775             (?(?&word))
5776             [[:blank:]\h]+
5777             \-?(?:eq|ne|lt|le|gt|ge)
5778             [[:blank:]\h]+
5779             (?(?&word))
5780             )
5781             )
5782             )
5783              
5784             (?
5785             join\(
5786             [[:blank:]\h]*
5787             (?:
5788             (?:(?&list_recur)[[:blank:]]*\,[[:blank:]]*(?&word))
5789             |
5790             (?:(?&list_recur))
5791             )
5792             [[:blank:]\h]*
5793             \)
5794             )
5795             (?
5796             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
5797             (?:
5798             (?(?&listfunc))
5799             )
5800             )
5801             |
5802             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
5803             (?:
5804             \{
5805             [[:blank:]\h]*
5806             (?(?&words))
5807             [[:blank:]\h]*
5808             \}
5809             )
5810             )
5811             |
5812             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
5813             (?:
5814             (?(?&split))
5815             )
5816             )
5817             |
5818             (?(?=\([[:blank:]\h]*)
5819             (?:
5820             \([[:blank:]\h]*(?(?&list_recur))[[:blank:]\h]*\)
5821             )
5822             )
5823             )
5824             (?
5825             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5826             (?:
5827             (?[a-zA-Z\_]\w+)
5828             \(
5829             [[:blank:]\h]*
5830             (?&words)
5831             [[:blank:]\h]*
5832             \)
5833             )
5834             )
5835             )
5836              
5837             (?
5838             (?:
5839             $REGEXP->{regex}
5840             |
5841             (?(?=(?:[s]${REGSEP}))
5842             (?®sub)
5843             )
5844             )
5845             )
5846              
5847             (?
5848             s(?${REGSEP})
5849             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
5850             \g{regsep}
5851             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
5852             \g{regsep}
5853             (?${REGFLAGS})?
5854             )
5855              
5856             (?
5857             split\(
5858             [[:blank:]\h]*
5859             (?(?®any))
5860             [[:blank:]\h]*\,[[:blank:]\h]*
5861             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
5862             (?:
5863             (?&word)
5864             )
5865             |
5866             (?:
5867             (?&list_recur)
5868             )
5869             )
5870             [[:blank:]\h]*
5871             \)
5872             )
5873             (?
5874             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
5875             (?:(?&substring)[[:blank:]\h]+(?&string))
5876             )
5877             |
5878             (?(?=(?:$TEXT|&variable))
5879             (?&substring)
5880             )
5881             )
5882              
5883             (?
5884             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5885             (?:
5886             (?(?&word))
5887             [[:blank:]\h]+
5888             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
5889             [[:blank:]\h]+
5890             (?(?&word))
5891             )
5892             )
5893             )
5894              
5895             (?
5896             sub\(
5897             [[:blank:]\h]*
5898             (?(?=(?:[s]${REGSEP}))
5899             (?®sub)
5900             )
5901             [[:blank:]\h]*
5902             \,
5903             [[:blank:]\h]*
5904             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5905             (?
5906             (?>(?&word))
5907             )
5908             )
5909             [[:blank:]\h]*
5910             \)
5911             )
5912              
5913             (?
5914             (?:
5915             (?$REGEXP->{cstring})
5916             )
5917             |
5918             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
5919             (?:
5920             (?&variable)
5921             )
5922             )
5923             )
5924              
5925             (?
5926             (?:
5927             \%\{
5928             (?(?=${FUNCNAME}\:)
5929             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
5930             )
5931             \}
5932             )
5933             |
5934             (?:
5935             \%\{
5936             (?(?=${VARNAME}\})
5937             (?${VARNAME})
5938             )
5939             \}
5940             )
5941             |
5942             (?:
5943             \%\{\:
5944             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
5945             (?(?&word))
5946             )
5947             \:\}
5948             )
5949             |
5950             (?:
5951             \%\{\:
5952             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
5953             (?&cond)
5954             )
5955             \:\}
5956             )
5957             |
5958             (?$REGEXP->{rebackref})
5959             )
5960              
5961             (?
5962             (?:
5963             $REGEXP->{digits}
5964             )
5965             |
5966             (?:
5967             \'
5968             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
5969             (?(?&string))
5970             )
5971             \'
5972             )
5973             |
5974             (?:
5975             \"
5976             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
5977             (?(?&string))
5978             )
5979             \"
5980             )
5981             |
5982             (?:
5983             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
5984             )
5985             |
5986             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
5987             (?&sub)
5988             )
5989             |
5990             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
5991             (?:
5992             (?&join)
5993             )
5994             )
5995             |
5996             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
5997             (?:
5998             (?&function)
5999             )
6000             )
6001             |
6002             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6003             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
6004             )
6005             |
6006             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
6007             (?:
6008             (?(?&variable))
6009             )
6010             )
6011             )
6012              
6013             (?
6014             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
6015             (?:
6016             (?:
6017             (?&word)
6018             [[:blank:]\h]*\,[[:blank:]\h]*
6019             (?&list_recur)
6020             )
6021             |
6022             (?:
6023             (?&word)
6024             )
6025             )
6026             )
6027             )
6028             )
6029             /x;
6030              
6031             ## "join" ["("] list [")"]
6032             ## | "join" ["("] list "," word [")"]
6033 20         1347 $TRUNK->{join} = qr/
6034             (?
6035             join\(
6036             [[:blank:]\h]*
6037             (?:
6038             (?:(?(?&list))[[:blank:]]*\,[[:blank:]]*(?(?&word)))
6039             |
6040             (?:(?(?&list)))
6041             )
6042             [[:blank:]\h]*
6043             \)
6044             )
6045             (?(DEFINE)
6046             (?
6047             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6048             (?:
6049             (?&stringcomp)
6050             )
6051             )
6052             |
6053             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6054             (?:
6055             (?&integercomp)
6056             )
6057             )
6058             |
6059             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
6060             (?:
6061             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
6062             [[:blank:]\h]+
6063             (?&word)
6064             )
6065             )
6066             |
6067             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
6068             (?:
6069             (?&word)
6070             [[:blank:]\h]+
6071             (?:
6072             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
6073             |
6074             \-(?ipmatch|strmatch|strcmatch|fnmatch)
6075             )
6076             [[:blank:]\h]+
6077             (?&word)
6078             )
6079             )
6080             |
6081             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
6082             (?:
6083             (?&word)
6084             [[:blank:]\h]+
6085             in
6086             [[:blank:]\h]+
6087             (?&listfunc)
6088             )
6089             )
6090             |
6091             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
6092             (?:
6093             (?&word)
6094             [[:blank:]\h]+
6095             [\=|\!]\~
6096             [[:blank:]\h]+
6097             $REGEXP->{regex}
6098             )
6099             )
6100             |
6101             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
6102             (?:
6103             (?&word)
6104             [[:blank:]\h]+
6105             in
6106             [[:blank:]\h]+
6107             \{
6108             [[:blank:]\h]*
6109             (?&list)
6110             [[:blank:]\h]*
6111             \}
6112             )
6113             )
6114             )
6115              
6116             (?
6117             (?:$Regexp::Common::Apache2::ap_true)
6118             |
6119             (?:$Regexp::Common::Apache2::ap_false)
6120             |
6121             (?:\![[:blank:]\h]*(?-1))
6122             |
6123             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
6124             |
6125             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
6126             |
6127             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
6128             (?:
6129             (?&comp)
6130             )
6131             )
6132             |
6133             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
6134             )
6135              
6136             (?
6137             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6138             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
6139             )
6140             )
6141              
6142             (?
6143             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6144             (?:
6145             (?(?&word))
6146             [[:blank:]\h]+
6147             \-?(?:eq|ne|lt|le|gt|ge)
6148             [[:blank:]\h]+
6149             (?(?&word))
6150             )
6151             )
6152             )
6153              
6154             (?
6155             join\(
6156             [[:blank:]\h]*
6157             (?:
6158             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
6159             |
6160             (?:(?&list))
6161             )
6162             [[:blank:]\h]*
6163             \)
6164             )
6165             (?
6166             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6167             (?:
6168             (?(?&listfunc))
6169             )
6170             )
6171             |
6172             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6173             (?:
6174             \{
6175             [[:blank:]\h]*
6176             (?(?&words))
6177             [[:blank:]\h]*
6178             \}
6179             )
6180             )
6181             |
6182             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
6183             (?:
6184             (?(?&split))
6185             )
6186             )
6187             |
6188             (?(?=\([[:blank:]\h]*)
6189             (?:
6190             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
6191             )
6192             )
6193             )
6194              
6195             (?
6196             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6197             (?:
6198             (?[a-zA-Z\_]\w+)
6199             \(
6200             [[:blank:]\h]*
6201             (?&words)
6202             [[:blank:]\h]*
6203             \)
6204             )
6205             )
6206             )
6207              
6208             (?
6209             (?:
6210             $REGEXP->{regex}
6211             |
6212             (?(?=(?:[s]${REGSEP}))
6213             (?®sub)
6214             )
6215             )
6216             )
6217              
6218             (?
6219             s(?${REGSEP})
6220             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
6221             \g{regsep}
6222             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
6223             \g{regsep}
6224             (?${REGFLAGS})?
6225             )
6226              
6227             (?
6228             split\(
6229             [[:blank:]\h]*
6230             (?(?®any))
6231             [[:blank:]\h]*\,[[:blank:]\h]*
6232             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6233             (?:
6234             (?&word)
6235             )
6236             |
6237             (?:
6238             (?&list)
6239             )
6240             )
6241             [[:blank:]\h]*
6242             \)
6243             )
6244              
6245             (?
6246             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
6247             (?:(?&substring)[[:blank:]\h]+(?&string))
6248             )
6249             |
6250             (?(?=(?:$TEXT|&variable))
6251             (?&substring)
6252             )
6253             )
6254              
6255             (?
6256             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6257             (?:
6258             (?(?&word))
6259             [[:blank:]\h]+
6260             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
6261             [[:blank:]\h]+
6262             (?(?&word))
6263             )
6264             )
6265             )
6266              
6267             (?
6268             sub\(
6269             [[:blank:]\h]*
6270             (?(?=(?:[s]${REGSEP}))
6271             (?®sub)
6272             )
6273             [[:blank:]\h]*
6274             \,
6275             [[:blank:]\h]*
6276             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6277             (?
6278             (?>(?&word))
6279             )
6280             )
6281             [[:blank:]\h]*
6282             \)
6283             )
6284              
6285             (?
6286             (?:
6287             (?$REGEXP->{cstring})
6288             )
6289             |
6290             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
6291             (?:
6292             (?&variable)
6293             )
6294             )
6295             )
6296              
6297             (?
6298             (?:
6299             \%\{
6300             (?(?=${FUNCNAME}\:)
6301             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
6302             )
6303             \}
6304             )
6305             |
6306             (?:
6307             \%\{
6308             (?(?=${VARNAME}\})
6309             (?${VARNAME})
6310             )
6311             \}
6312             )
6313             |
6314             (?:
6315             \%\{\:
6316             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6317             (?(?&word))
6318             )
6319             \:\}
6320             )
6321             |
6322             (?:
6323             \%\{\:
6324             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
6325             (?&cond)
6326             )
6327             \:\}
6328             )
6329             |
6330             (?$REGEXP->{rebackref})
6331             )
6332              
6333             (?
6334             (?:
6335             $TRUNK->{digits}
6336             )
6337             |
6338             (?:
6339             \'
6340             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
6341             (?(?&string))
6342             )
6343             \'
6344             )
6345             |
6346             (?:
6347             \"
6348             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
6349             (?(?&string))
6350             )
6351             \"
6352             )
6353             |
6354             (?:
6355             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
6356             )
6357             |
6358             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
6359             (?&sub)
6360             )
6361             |
6362             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
6363             (?:
6364             (?&join_recur)
6365             )
6366             )
6367             |
6368             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
6369             (?:
6370             (?&function)
6371             )
6372             )
6373             |
6374             (?:\((?-1)\)) # Recurse on the entire word regex
6375             |
6376             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
6377             (?:
6378             (?(?&variable))
6379             )
6380             )
6381             )
6382             (?
6383             (?:
6384             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6385             (?&word)
6386             )
6387             [[:blank:]\h]*\,[[:blank:]\h]*
6388             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
6389             (?&list)
6390             )
6391             )
6392             |
6393             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6394             (?&word)
6395             )
6396             )
6397              
6398             )
6399             /x;
6400              
6401             ## digits
6402             ## | "'" string "'"
6403             ## | '"' string '"'
6404             ## | word "." word
6405             ## | variable
6406             ## | sub
6407             ## | join
6408             ## | function
6409             ## | "(" word ")"
6410 20         1629 $TRUNK->{word} = qr/
6411             (?
6412             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
6413             (?(?&sub))
6414             )
6415             |
6416             (?:
6417             (?$TRUNK->{digits})
6418             )
6419             |
6420             (?(?=\'(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
6421             (?\')(?(?&string))\'
6422             )
6423             |
6424             (?(?=\"(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
6425             (?\")(?(?&string))\"
6426             )
6427             |
6428             (?:
6429             (?[^[:cntrl:]]+\.[^[:cntrl:]]+)
6430             )
6431             |
6432             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
6433             (?(?&join))
6434             )
6435             |
6436             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
6437             (?(?&function))
6438             )
6439             |
6440             (?: # Recurse on the entire word regex
6441             \((?(?&word_recur))\)
6442             )
6443             |
6444             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
6445             (?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
6446             (?(?&variable))
6447             )
6448             |
6449             (?(?=\$\{?${DIGIT}\}?\b)
6450             \$${DIGIT}
6451             )
6452             )
6453             (?(DEFINE)
6454             (?
6455             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))(?&stringcomp))
6456             |
6457             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))(?&integercomp))
6458             |
6459             (?:
6460             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
6461             [[:blank:]\h]+
6462             (?&word_recur) # Recurse on the entire word regexp
6463             )
6464             |
6465             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
6466             (?&word_recur) # Recurse on the entire word regexp
6467             [[:blank:]\h]+
6468             (?:
6469             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
6470             |
6471             \-(?ipmatch|strmatch|strcmatch|fnmatch)
6472             )
6473             [[:blank:]\h]+
6474             (?&word_recur) # Recurse on the entire word regexp
6475             )
6476             |
6477             (?(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
6478             (?&word_recur) # Recurse on the entire word regexp
6479             [[:blank:]\h]+
6480             in
6481             [[:blank:]\h]+
6482             (?&listfunc)
6483             )
6484             |
6485             (?(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
6486             (?&word_recur) # Recurse on the entire word regexp
6487             [[:blank:]\h]+
6488             [\=|\!]\~
6489             [[:blank:]\h]+
6490             $TRUNK->{regex}
6491             )
6492             |
6493             (?(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
6494             (?&word_recur) # Recurse on the entire word regexp
6495             [[:blank:]\h]+
6496             in
6497             [[:blank:]\h]+
6498             \{
6499             [[:blank:]\h]*
6500             (?&list)
6501             [[:blank:]\h]*
6502             \}
6503             )
6504             )
6505             (?
6506             (?:$Regexp::Common::Apache2::ap_true)
6507             |
6508             (?:$Regexp::Common::Apache2::ap_false)
6509             |
6510             (?:\![[:blank:]\h]*(?-1))
6511             |
6512             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
6513             |
6514             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
6515             |
6516             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
6517             (?:
6518             (?&comp)
6519             )
6520             )
6521             |
6522             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
6523             )
6524              
6525             (?
6526             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6527             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
6528             )
6529             )
6530              
6531             (?
6532             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
6533             (?:
6534             (?(?&word_recur)) # Recurse on the entire word regexp
6535             [[:blank:]\h]+
6536             \-?(?:eq|ne|lt|le|gt|ge)
6537             [[:blank:]\h]+
6538             (?(?&word_recur)) # Recurse on the entire word regexp
6539             )
6540             )
6541             )
6542             (?
6543             join\(
6544             [[:blank:]\h]*
6545             (?:
6546             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word_recur))
6547             |
6548             (?:(?&list))
6549             )
6550             [[:blank:]\h]*
6551             \)
6552             )
6553             (?
6554             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6555             (?:
6556             (?(?&listfunc))
6557             )
6558             )
6559             |
6560             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6561             (?:
6562             \{
6563             [[:blank:]\h]*
6564             (?(?&words))
6565             [[:blank:]\h]*
6566             \}
6567             )
6568             )
6569             |
6570             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
6571             (?:
6572             (?(?&split))
6573             )
6574             )
6575             |
6576             (?(?=\([[:blank:]\h]*)
6577             (?:
6578             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
6579             )
6580             )
6581             )
6582              
6583             (?
6584             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6585             (?:
6586             (?[a-zA-Z\_]\w+)
6587             \(
6588             [[:blank:]\h]*
6589             (?&words)
6590             [[:blank:]\h]*
6591             \)
6592             )
6593             )
6594             )
6595              
6596             (?
6597             (?:
6598             $REGEXP->{regex}
6599             |
6600             (?(?=(?:[s]${REGSEP}))
6601             (?®sub)
6602             )
6603             )
6604             )
6605              
6606             (?
6607             s(?${REGSEP})
6608             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
6609             \g{regsep}
6610             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
6611             \g{regsep}
6612             (?${REGFLAGS})?
6613             )
6614              
6615             (?
6616             split\(
6617             [[:blank:]\h]*
6618             (?(?®any))
6619             [[:blank:]\h]*\,[[:blank:]\h]*
6620             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
6621             (?:
6622             (?&word_recur)
6623             )
6624             |
6625             (?:
6626             (?&list)
6627             )
6628             )
6629             [[:blank:]\h]*
6630             \)
6631             )
6632             (?
6633             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
6634             (?:(?&substring)[[:blank:]\h]+(?&string))
6635             )
6636             |
6637             (?(?=(?:$TEXT|&variable))
6638             (?&substring)
6639             )
6640             )
6641              
6642             (?
6643             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
6644             (?(?&word_recur)) # Recurse on the entire word regexp
6645             [[:blank:]\h]+
6646             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
6647             [[:blank:]\h]+
6648             (?(?&word_recur)) # Recurse on the entire word regexp
6649             )
6650             )
6651             (?
6652             sub\(
6653             [[:blank:]\h]*
6654             (?(?®sub))
6655             [[:blank:]\h]*
6656             \,
6657             [[:blank:]\h]*
6658             (?(?=(?:\([[:blank:]\h]*)?(?:[0-9]|(?:["']\w)|sub|join|${FUNCNAME}|\%\{))
6659             (?
6660             (?&word_recur)
6661             ) # Recurse on the entire word regexp
6662             )
6663             [[:blank:]\h]*
6664             \)
6665             )
6666             (?
6667             (?:
6668             (?$REGEXP->{cstring})
6669             )
6670             |
6671             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
6672             (?:
6673             (?&variable)
6674             )
6675             )
6676             )
6677              
6678             (?
6679             (?:
6680             \%\{
6681             (?(?=${FUNCNAME}\:)
6682             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
6683             )
6684             \}
6685             )
6686             |
6687             (?:
6688             \%\{
6689             (?(?=${VARNAME}\})
6690             (?${VARNAME})
6691             )
6692             \}
6693             )
6694             |
6695             (?:
6696             \%\{\:
6697             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
6698             (?(?&word_recur))
6699             )
6700             \:\}
6701             )
6702             |
6703             (?:
6704             \%\{\:
6705             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
6706             (?&cond)
6707             )
6708             \:\}
6709             )
6710             |
6711             (?$TRUNK->{rebackref})
6712             )
6713             (?
6714             (?:
6715             $TRUNK->{digits}
6716             )
6717             |
6718             (?:
6719             \'
6720             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
6721             (?(?&string))
6722             )
6723             \'
6724             )
6725             |
6726             (?:
6727             \"
6728             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
6729             (?(?&string))
6730             )
6731             \"
6732             )
6733             |
6734             (?:
6735             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
6736             )
6737             |
6738             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
6739             (?&sub)
6740             )
6741             |
6742             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
6743             (?:
6744             (?&join)
6745             )
6746             )
6747             |
6748             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
6749             (?:
6750             (?&function)
6751             )
6752             )
6753             |
6754             (?:\((?-1)\)) # Recurse on the entire word regex
6755             |
6756             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
6757             (?:
6758             (?(?&variable))
6759             )
6760             )
6761             )
6762             (?
6763             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
6764             (?:
6765             (?:
6766             (?&word_recur)
6767             [[:blank:]\h]*\,[[:blank:]\h]*
6768             (?&list)
6769             )
6770             |
6771             (?:
6772             (?&word_recur)
6773             )
6774             )
6775             )
6776             )
6777             )
6778             /x;
6779            
6780             ## "%{" varname "}"
6781             ## | "%{" funcname ":" funcargs "}"
6782             ## | "%{:" word ":}"
6783             ## | "%{:" cond ":}"
6784             ## | rebackref
6785 20         3028 $TRUNK->{variable} = qr/
6786             (?
6787             (?:
6788             \%\{
6789             (?(?=${FUNCNAME}\:)
6790             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
6791             )
6792             \}
6793             )
6794             |
6795             (?:
6796             \%\{
6797             (?(?=${VARNAME})
6798             (?${VARNAME})
6799             )
6800             \}
6801             )
6802             |
6803             (?:
6804             \%\{\:
6805             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
6806             (?(?&cond))
6807             )
6808             \:\}
6809             )
6810             |
6811             (?:
6812             \%\{\:
6813             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
6814             (?(?&word))
6815             )
6816             \:\}
6817             )
6818             |
6819             (?$TRUNK->{rebackref})
6820             )
6821             (?(DEFINE)
6822             (?
6823             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6824             (?:
6825             (?&stringcomp)
6826             )
6827             )
6828             |
6829             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6830             (?:
6831             (?&integercomp)
6832             )
6833             )
6834             |
6835             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
6836             (?:
6837             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
6838             [[:blank:]\h]+
6839             (?&word)
6840             )
6841             )
6842             |
6843             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
6844             (?:
6845             (?&word)
6846             [[:blank:]\h]+
6847             (?:
6848             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
6849             |
6850             \-(?ipmatch|strmatch|strcmatch|fnmatch)
6851             )
6852             [[:blank:]\h]+
6853             (?&word)
6854             )
6855             )
6856             |
6857             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
6858             (?:
6859             (?&word)
6860             [[:blank:]\h]+
6861             in
6862             [[:blank:]\h]+
6863             (?&listfunc)
6864             )
6865             )
6866             |
6867             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
6868             (?:
6869             (?&word)
6870             [[:blank:]\h]+
6871             [\=|\!]\~
6872             [[:blank:]\h]+
6873             $REGEXP->{regex}
6874             )
6875             )
6876             |
6877             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
6878             (?:
6879             (?&word)
6880             [[:blank:]\h]+
6881             in
6882             [[:blank:]\h]+
6883             \{
6884             [[:blank:]\h]*
6885             (?&list)
6886             [[:blank:]\h]*
6887             \}
6888             )
6889             )
6890             )
6891              
6892             (?
6893             (?:$Regexp::Common::Apache2::ap_true)
6894             |
6895             (?:$Regexp::Common::Apache2::ap_false)
6896             |
6897             (?:\![[:blank:]\h]*(?-1))
6898             |
6899             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
6900             |
6901             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
6902             |
6903             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
6904             (?:
6905             (?&comp)
6906             )
6907             )
6908             |
6909             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
6910             )
6911              
6912             (?
6913             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6914             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
6915             )
6916             )
6917              
6918             (?
6919             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6920             (?:
6921             (?(?&word))
6922             [[:blank:]\h]+
6923             \-?(?:eq|ne|lt|le|gt|ge)
6924             [[:blank:]\h]+
6925             (?(?&word))
6926             )
6927             )
6928             )
6929              
6930             (?
6931             join\(
6932             [[:blank:]\h]*
6933             (?:
6934             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
6935             |
6936             (?:(?&list))
6937             )
6938             [[:blank:]\h]*
6939             \)
6940             )
6941              
6942             (?
6943             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
6944             (?:
6945             (?(?&listfunc))
6946             )
6947             )
6948             |
6949             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6950             (?:
6951             \{
6952             [[:blank:]\h]*
6953             (?(?&words))
6954             [[:blank:]\h]*
6955             \}
6956             )
6957             )
6958             |
6959             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
6960             (?:
6961             (?(?&split))
6962             )
6963             )
6964             |
6965             (?(?=\([[:blank:]\h]*)
6966             (?:
6967             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
6968             )
6969             )
6970             )
6971              
6972             (?
6973             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
6974             (?:
6975             (?[a-zA-Z\_]\w+)
6976             \(
6977             [[:blank:]\h]*
6978             (?&words)
6979             [[:blank:]\h]*
6980             \)
6981             )
6982             )
6983             )
6984              
6985             (?
6986             (?:
6987             $REGEXP->{regex}
6988             |
6989             (?(?=(?:[s]${REGSEP}))
6990             (?®sub)
6991             )
6992             )
6993             )
6994              
6995             (?
6996             s(?${REGSEP})
6997             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
6998             \g{regsep}
6999             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
7000             \g{regsep}
7001             (?${REGFLAGS})?
7002             )
7003              
7004             (?
7005             split\(
7006             [[:blank:]\h]*
7007             (?(?®any))
7008             [[:blank:]\h]*\,[[:blank:]\h]*
7009             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7010             (?:
7011             (?&word)
7012             )
7013             |
7014             (?:
7015             (?&list)
7016             )
7017             )
7018             [[:blank:]\h]*
7019             \)
7020             )
7021              
7022             (?
7023             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
7024             (?:(?&substring)[[:blank:]\h]+(?&string))
7025             )
7026             |
7027             (?(?=(?:$TEXT|&variable))
7028             (?&substring)
7029             )
7030             )
7031              
7032             (?
7033             (?:
7034             (?:$TRUNK->{cstring})
7035             |
7036             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))(?R)) # Recurse on the entire variable regexp if it looks like one
7037             )
7038             )
7039             (?
7040             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
7041             (?:
7042             (?(?&word))
7043             [[:blank:]\h]+
7044             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
7045             [[:blank:]\h]+
7046             (?(?&word))
7047             )
7048             )
7049             )
7050              
7051             (?
7052             sub\(
7053             [[:blank:]\h]*
7054             (?(?=(?:[s]${REGSEP}))
7055             (?®sub)
7056             )
7057             [[:blank:]\h]*
7058             \,
7059             [[:blank:]\h]*
7060             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7061             (?
7062             (?>(?&word))
7063             )
7064             )
7065             [[:blank:]\h]*
7066             \)
7067             )
7068              
7069             (?
7070             (?:
7071             \%\{
7072             (?(?=${FUNCNAME}\:)
7073             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
7074             )
7075             \}
7076             )
7077             |
7078             (?:
7079             \%\{
7080             (?(?=${VARNAME}\})
7081             (?${VARNAME})
7082             )
7083             \}
7084             )
7085             |
7086             (?:
7087             \%\{\:
7088             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
7089             (?(?&word))
7090             )
7091             \:\}
7092             )
7093             |
7094             (?:
7095             \%\{\:
7096             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
7097             (?&cond)
7098             )
7099             \:\}
7100             )
7101             |
7102             (?$TRUNK->{rebackref})
7103             )
7104             (?
7105             (?:$TRUNK->{digits})
7106             |
7107             (?:
7108             \'
7109             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
7110             (?(?&string))
7111             )
7112             \'
7113             )
7114             |
7115             (?:
7116             \"
7117             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
7118             (?(?&string))
7119             )
7120             \"
7121             )
7122             |
7123             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
7124             (?&sub)
7125             )
7126             |
7127             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
7128             (?:
7129             (?&join)
7130             )
7131             )
7132             |
7133             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
7134             (?:
7135             (?&function)
7136             )
7137             )
7138             |
7139             (?:\((?-1)\))
7140             |
7141             (?:[^[:cntrl:]]+)\.(?:[^[:cntrl:]]+)
7142             |
7143             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
7144             (?:
7145             (?(?&variable_recur))
7146             )
7147             )
7148             )
7149             (?
7150             (?:
7151             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7152             (?&word)
7153             )
7154             [[:blank:]\h]*\,[[:blank:]\h]*
7155             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
7156             (?&list)
7157             )
7158             )
7159             |
7160             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7161             (?&word)
7162             )
7163             )
7164              
7165             )
7166             /x;
7167              
7168             ## word
7169             ## | word "," list
7170 20         2368 $TRUNK->{words} = qr/
7171             (?
7172             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
7173             (?:
7174             (?:
7175             (?(?&word))
7176             [[:blank:]\h]*\,[[:blank:]\h]*
7177             (?(?&list))
7178             )
7179             |
7180             (?:
7181             (?(?&word))
7182             )
7183             )
7184             )
7185             )
7186             (?(DEFINE)
7187             (?
7188             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
7189             (?:
7190             (?&stringcomp)
7191             )
7192             )
7193             |
7194             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
7195             (?:
7196             (?&integercomp)
7197             )
7198             )
7199             |
7200             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
7201             (?:
7202             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
7203             [[:blank:]\h]+
7204             (?&word)
7205             )
7206             )
7207             |
7208             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
7209             (?:
7210             (?&word)
7211             [[:blank:]\h]+
7212             (?:
7213             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
7214             |
7215             \-(?ipmatch|strmatch|strcmatch|fnmatch)
7216             )
7217             [[:blank:]\h]+
7218             (?&word)
7219             )
7220             )
7221             |
7222             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
7223             (?:
7224             (?&word)
7225             [[:blank:]\h]+
7226             in
7227             [[:blank:]\h]+
7228             (?&listfunc)
7229             )
7230             )
7231             |
7232             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
7233             (?:
7234             (?&word)
7235             [[:blank:]\h]+
7236             [\=|\!]\~
7237             [[:blank:]\h]+
7238             $REGEXP->{regex}
7239             )
7240             )
7241             |
7242             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
7243             (?:
7244             (?&word)
7245             [[:blank:]\h]+
7246             in
7247             [[:blank:]\h]+
7248             \{
7249             [[:blank:]\h]*
7250             (?&list)
7251             [[:blank:]\h]*
7252             \}
7253             )
7254             )
7255             )
7256              
7257             (?
7258             (?:$Regexp::Common::Apache2::ap_true)
7259             |
7260             (?:$Regexp::Common::Apache2::ap_false)
7261             |
7262             (?:\![[:blank:]\h]*(?-1))
7263             |
7264             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
7265             |
7266             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
7267             |
7268             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
7269             (?:
7270             (?&comp)
7271             )
7272             )
7273             |
7274             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
7275             )
7276              
7277             (?
7278             (?(?=[a-zA-Z\_]\w+\()
7279             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words_recur)[[:blank:]\h]*\) # R recurring on the entire words regexp
7280             )
7281             )
7282             (?
7283             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
7284             (?:
7285             (?(?&word))
7286             [[:blank:]\h]+
7287             \-?(?:eq|ne|lt|le|gt|ge)
7288             [[:blank:]\h]+
7289             (?(?&word))
7290             )
7291             )
7292             )
7293              
7294             (?
7295             join\(
7296             [[:blank:]\h]*
7297             (?:
7298             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
7299             |
7300             (?:(?&list))
7301             )
7302             [[:blank:]\h]*
7303             \)
7304             )
7305              
7306             (?
7307             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
7308             (?:
7309             (?(?&listfunc))
7310             )
7311             )
7312             |
7313             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
7314             (?:
7315             \{
7316             [[:blank:]\h]*
7317             (?(?&words_recur)) # R recurring on the entire words regexp
7318             [[:blank:]\h]*
7319             \}
7320             )
7321             )
7322             |
7323             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
7324             (?:
7325             (?(?&split))
7326             )
7327             )
7328             |
7329             (?(?=\([[:blank:]\h]*)
7330             (?:
7331             \([[:blank:]\h]*(?-1)[[:blank:]\h]*\)
7332             )
7333             )
7334             )
7335             (?
7336             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
7337             (?:
7338             (?[a-zA-Z\_]\w+)
7339             \(
7340             [[:blank:]\h]*
7341             (?&words_recur) # R recurring on the entire words regexp
7342             [[:blank:]\h]*
7343             \)
7344             )
7345             )
7346             )
7347             (?
7348             (?:
7349             $REGEXP->{regex}
7350             |
7351             (?(?=(?:[s]${REGSEP}))
7352             (?®sub)
7353             )
7354             )
7355             )
7356              
7357             (?
7358             s(?${REGSEP})
7359             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
7360             \g{regsep}
7361             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
7362             \g{regsep}
7363             (?${REGFLAGS})?
7364             )
7365              
7366             (?
7367             split\(
7368             [[:blank:]\h]*
7369             (?(?®any))
7370             [[:blank:]\h]*\,[[:blank:]\h]*
7371             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7372             (?:
7373             (?&word)
7374             )
7375             |
7376             (?:
7377             (?&list)
7378             )
7379             )
7380             [[:blank:]\h]*
7381             \)
7382             )
7383              
7384             (?
7385             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
7386             (?:(?&substring)[[:blank:]\h]+(?&string))
7387             )
7388             |
7389             (?(?=(?:$TEXT|&variable))
7390             (?&substring)
7391             )
7392             )
7393              
7394             (?
7395             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
7396             (?:
7397             (?(?&word))
7398             [[:blank:]\h]+
7399             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
7400             [[:blank:]\h]+
7401             (?(?&word))
7402             )
7403             )
7404             )
7405              
7406             (?
7407             sub\(
7408             [[:blank:]\h]*
7409             (?(?=(?:[s]${REGSEP}))
7410             (?®sub)
7411             )
7412             [[:blank:]\h]*
7413             \,
7414             [[:blank:]\h]*
7415             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7416             (?
7417             (?>(?&word))
7418             )
7419             )
7420             [[:blank:]\h]*
7421             \)
7422             )
7423              
7424             (?
7425             (?:
7426             (?$REGEXP->{cstring})
7427             )
7428             |
7429             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
7430             (?:
7431             (?&variable)
7432             )
7433             )
7434             )
7435              
7436             (?
7437             (?:
7438             \%\{
7439             (?(?=${FUNCNAME}\:)
7440             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
7441             )
7442             \}
7443             )
7444             |
7445             (?:
7446             \%\{
7447             (?(?=${VARNAME}\})
7448             (?${VARNAME})
7449             )
7450             \}
7451             )
7452             |
7453             (?:
7454             \%\{\:
7455             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7456             (?(?&word))
7457             )
7458             \:\}
7459             )
7460             |
7461             (?:
7462             \%\{\:
7463             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
7464             (?&cond)
7465             )
7466             \:\}
7467             )
7468             |
7469             (?$REGEXP->{rebackref})
7470             )
7471              
7472             (?
7473             (?:
7474             $REGEXP->{digits}
7475             )
7476             |
7477             (?:
7478             \'
7479             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
7480             (?(?&string))
7481             )
7482             \'
7483             )
7484             |
7485             (?:
7486             \"
7487             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
7488             (?(?&string))
7489             )
7490             \"
7491             )
7492             |
7493             (?:
7494             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
7495             )
7496             |
7497             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
7498             (?&sub)
7499             )
7500             |
7501             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
7502             (?:
7503             (?&join)
7504             )
7505             )
7506             |
7507             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
7508             (?:
7509             (?&function)
7510             )
7511             )
7512             |
7513             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7514             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
7515             )
7516             |
7517             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
7518             (?:
7519             (?(?&variable))
7520             )
7521             )
7522             )
7523              
7524             (?
7525             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
7526             (?:
7527             (?:
7528             (?&word)
7529             [[:blank:]\h]*\,[[:blank:]\h]*
7530             (?&list)
7531             )
7532             |
7533             (?:
7534             (?&word)
7535             )
7536             )
7537             )
7538             )
7539             )
7540             /x;
7541              
7542             ## word "==" word
7543             ## | word "!=" word
7544             ## | word "<" word
7545             ## | word "<=" word
7546             ## | word ">" word
7547             ## | word ">=" word
7548 20         2863 $TRUNK->{stringcomp} = qr/
7549             (?
7550             (?(?&word))
7551             [[:blank:]\h]+
7552             (?\=\=|\!\=|\<|\<\=|\>|\>\=)
7553             [[:blank:]\h]+
7554             (?(?&word))
7555             )
7556             (?(DEFINE)
7557             (?
7558             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
7559             (?:
7560             (?&stringcomp_recur) # Recurse on the entire stringcomp regexp
7561             )
7562             )
7563             |
7564             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
7565             (?:
7566             (?&integercomp)
7567             )
7568             )
7569             |
7570             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
7571             (?:
7572             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
7573             [[:blank:]\h]+
7574             (?&word)
7575             )
7576             )
7577             |
7578             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
7579             (?:
7580             (?&word)
7581             [[:blank:]\h]+
7582             (?:
7583             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
7584             |
7585             \-(?ipmatch|strmatch|strcmatch|fnmatch)
7586             )
7587             [[:blank:]\h]+
7588             (?&word)
7589             )
7590             )
7591             |
7592             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
7593             (?:
7594             (?&word)
7595             [[:blank:]\h]+
7596             in
7597             [[:blank:]\h]+
7598             (?&listfunc)
7599             )
7600             )
7601             |
7602             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
7603             (?:
7604             (?&word)
7605             [[:blank:]\h]+
7606             [\=|\!]\~
7607             [[:blank:]\h]+
7608             $TRUNK->{regex}
7609             )
7610             )
7611             |
7612             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
7613             (?:
7614             (?&word)
7615             [[:blank:]\h]+
7616             in
7617             [[:blank:]\h]+
7618             \{
7619             [[:blank:]\h]*
7620             (?&list)
7621             [[:blank:]\h]*
7622             \}
7623             )
7624             )
7625             )
7626             (?
7627             (?:$Regexp::Common::Apache2::ap_true)
7628             |
7629             (?:$Regexp::Common::Apache2::ap_false)
7630             |
7631             (?:\![[:blank:]\h]*(?-1))
7632             |
7633             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
7634             |
7635             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
7636             |
7637             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
7638             (?:
7639             (?&comp)
7640             )
7641             )
7642             |
7643             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
7644             )
7645              
7646             (?
7647             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7648             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
7649             )
7650             )
7651              
7652             (?
7653             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
7654             (?:
7655             (?(?&word))
7656             [[:blank:]\h]+
7657             \-?(?:eq|ne|lt|le|gt|ge)
7658             [[:blank:]\h]+
7659             (?(?&word))
7660             )
7661             )
7662             )
7663              
7664             (?
7665             join\(
7666             [[:blank:]\h]*
7667             (?:
7668             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
7669             |
7670             (?:(?&list))
7671             )
7672             [[:blank:]\h]*
7673             \)
7674             )
7675              
7676             (?
7677             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
7678             (?:
7679             (?(?&listfunc))
7680             )
7681             )
7682             |
7683             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7684             (?:
7685             \{
7686             [[:blank:]\h]*
7687             (?(?&words))
7688             [[:blank:]\h]*
7689             \}
7690             )
7691             )
7692             |
7693             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
7694             (?:
7695             (?(?&split))
7696             )
7697             )
7698             |
7699             (?(?=\([[:blank:]\h]*)
7700             (?:
7701             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
7702             )
7703             )
7704             )
7705              
7706             (?
7707             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7708             (?:
7709             (?[a-zA-Z\_]\w+)
7710             \(
7711             [[:blank:]\h]*
7712             (?&words)
7713             [[:blank:]\h]*
7714             \)
7715             )
7716             )
7717             )
7718              
7719             (?
7720             (?:
7721             $REGEXP->{regex}
7722             |
7723             (?(?=(?:[s]${REGSEP}))
7724             (?®sub)
7725             )
7726             )
7727             )
7728              
7729             (?
7730             s(?${REGSEP})
7731             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
7732             \g{regsep}
7733             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
7734             \g{regsep}
7735             (?${REGFLAGS})?
7736             )
7737              
7738             (?
7739             split\(
7740             [[:blank:]\h]*
7741             (?(?®any))
7742             [[:blank:]\h]*\,[[:blank:]\h]*
7743             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7744             (?:
7745             (?&word)
7746             )
7747             |
7748             (?:
7749             (?&list)
7750             )
7751             )
7752             [[:blank:]\h]*
7753             \)
7754             )
7755              
7756             (?
7757             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
7758             (?:(?&substring)[[:blank:]\h]+(?&string))
7759             )
7760             |
7761             (?(?=(?:$TEXT|&variable))
7762             (?&substring)
7763             )
7764             )
7765              
7766             (?
7767             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
7768             (?:
7769             (?(?&word))
7770             [[:blank:]\h]+
7771             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
7772             [[:blank:]\h]+
7773             (?(?&word))
7774             )
7775             )
7776             )
7777             (?
7778             sub\(
7779             [[:blank:]\h]*
7780             (?(?=(?:[s]${REGSEP}))
7781             (?®sub)
7782             )
7783             [[:blank:]\h]*
7784             \,
7785             [[:blank:]\h]*
7786             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7787             (?
7788             (?>(?&word))
7789             )
7790             )
7791             [[:blank:]\h]*
7792             \)
7793             )
7794              
7795             (?
7796             (?:
7797             (?$REGEXP->{cstring})
7798             )
7799             |
7800             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
7801             (?:
7802             (?&variable)
7803             )
7804             )
7805             )
7806              
7807             (?
7808             (?:
7809             \%\{
7810             (?(?=${FUNCNAME}\:)
7811             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
7812             )
7813             \}
7814             )
7815             |
7816             (?:
7817             \%\{
7818             (?(?=${VARNAME}\})
7819             (?${VARNAME})
7820             )
7821             \}
7822             )
7823             |
7824             (?:
7825             \%\{\:
7826             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7827             (?(?&word))
7828             )
7829             \:\}
7830             )
7831             |
7832             (?:
7833             \%\{\:
7834             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
7835             (?&cond)
7836             )
7837             \:\}
7838             )
7839             |
7840             (?$REGEXP->{rebackref})
7841             )
7842              
7843             (?
7844             (?:
7845             $REGEXP->{digits}
7846             )
7847             |
7848             (?:
7849             \'
7850             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
7851             (?(?&string))
7852             )
7853             \'
7854             )
7855             |
7856             (?:
7857             \"
7858             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
7859             (?(?&string))
7860             )
7861             \"
7862             )
7863             |
7864             (?:
7865             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
7866             )
7867             |
7868             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
7869             (?&sub)
7870             )
7871             |
7872             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
7873             (?:
7874             (?&join)
7875             )
7876             )
7877             |
7878             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
7879             (?:
7880             (?&function)
7881             )
7882             )
7883             |
7884             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7885             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
7886             )
7887             |
7888             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
7889             (?:
7890             (?(?&variable))
7891             )
7892             )
7893             )
7894              
7895             (?
7896             (?:
7897             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7898             (?&word)
7899             )
7900             [[:blank:]\h]*\,[[:blank:]\h]*
7901             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
7902             (?&list)
7903             )
7904             )
7905             |
7906             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
7907             (?&word)
7908             )
7909             )
7910              
7911             )
7912             /x;
7913              
7914             ## word "-eq" word | word "eq" word
7915             ## | word "-ne" word | word "ne" word
7916             ## | word "-lt" word | word "lt" word
7917             ## | word "-le" word | word "le" word
7918             ## | word "-gt" word | word "gt" word
7919             ## | word "-ge" word | word "ge" word
7920 20         1685 $TRUNK->{integercomp} = qr/
7921             (?
7922             (?(?&word))
7923             [[:blank:]\h]+
7924             \-?(?eq|ne|lt|le|gt|ge)
7925             [[:blank:]\h]+
7926             (?(?&word))
7927             )
7928             (?(DEFINE)
7929             (?
7930             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
7931             (?:
7932             (?&stringcomp) # Recurse on the entire stringcomp regexp
7933             )
7934             )
7935             |
7936             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
7937             (?:
7938             (?&integercomp_recur)
7939             )
7940             )
7941             |
7942             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
7943             (?:
7944             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
7945             [[:blank:]\h]+
7946             (?&word)
7947             )
7948             )
7949             |
7950             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
7951             (?:
7952             (?&word)
7953             [[:blank:]\h]+
7954             (?:
7955             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
7956             |
7957             \-(?ipmatch|strmatch|strcmatch|fnmatch)
7958             )
7959             [[:blank:]\h]+
7960             (?&word)
7961             )
7962             )
7963             |
7964             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
7965             (?:
7966             (?&word)
7967             [[:blank:]\h]+
7968             in
7969             [[:blank:]\h]+
7970             (?&listfunc)
7971             )
7972             )
7973             |
7974             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
7975             (?:
7976             (?&word)
7977             [[:blank:]\h]+
7978             [\=|\!]\~
7979             [[:blank:]\h]+
7980             $TRUNK->{regex}
7981             )
7982             )
7983             |
7984             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
7985             (?:
7986             (?&word)
7987             [[:blank:]\h]+
7988             in
7989             [[:blank:]\h]+
7990             \{
7991             [[:blank:]\h]*
7992             (?&list)
7993             [[:blank:]\h]*
7994             \}
7995             )
7996             )
7997             )
7998             (?
7999             (?:$Regexp::Common::Apache2::ap_true)
8000             |
8001             (?:$Regexp::Common::Apache2::ap_false)
8002             |
8003             (?:\![[:blank:]\h]*(?-1))
8004             |
8005             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
8006             |
8007             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
8008             |
8009             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
8010             (?:
8011             (?&comp)
8012             )
8013             )
8014             |
8015             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
8016             )
8017              
8018             (?
8019             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8020             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
8021             )
8022             )
8023              
8024             (?
8025             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
8026             (?:
8027             (?(?&word))
8028             [[:blank:]\h]+
8029             \-?(?:eq|ne|lt|le|gt|ge)
8030             [[:blank:]\h]+
8031             (?(?&word))
8032             )
8033             )
8034             )
8035             (?
8036             join\(
8037             [[:blank:]\h]*
8038             (?:
8039             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
8040             |
8041             (?:(?&list))
8042             )
8043             [[:blank:]\h]*
8044             \)
8045             )
8046              
8047             (?
8048             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8049             (?:
8050             (?(?&listfunc))
8051             )
8052             )
8053             |
8054             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8055             (?:
8056             \{
8057             [[:blank:]\h]*
8058             (?(?&words))
8059             [[:blank:]\h]*
8060             \}
8061             )
8062             )
8063             |
8064             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
8065             (?:
8066             (?(?&split))
8067             )
8068             )
8069             |
8070             (?(?=\([[:blank:]\h]*)
8071             (?:
8072             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
8073             )
8074             )
8075             )
8076              
8077             (?
8078             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8079             (?:
8080             (?[a-zA-Z\_]\w+)
8081             \(
8082             [[:blank:]\h]*
8083             (?&words)
8084             [[:blank:]\h]*
8085             \)
8086             )
8087             )
8088             )
8089              
8090             (?
8091             (?:
8092             $REGEXP->{regex}
8093             |
8094             (?(?=(?:[s]${REGSEP}))
8095             (?®sub)
8096             )
8097             )
8098             )
8099              
8100             (?
8101             s(?${REGSEP})
8102             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
8103             \g{regsep}
8104             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
8105             \g{regsep}
8106             (?${REGFLAGS})?
8107             )
8108              
8109             (?
8110             split\(
8111             [[:blank:]\h]*
8112             (?(?®any))
8113             [[:blank:]\h]*\,[[:blank:]\h]*
8114             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8115             (?:
8116             (?&word)
8117             )
8118             |
8119             (?:
8120             (?&list)
8121             )
8122             )
8123             [[:blank:]\h]*
8124             \)
8125             )
8126              
8127             (?
8128             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
8129             (?:(?&substring)[[:blank:]\h]+(?&string))
8130             )
8131             |
8132             (?(?=(?:$TEXT|&variable))
8133             (?&substring)
8134             )
8135             )
8136              
8137             (?
8138             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8139             (?:
8140             (?(?&word))
8141             [[:blank:]\h]+
8142             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
8143             [[:blank:]\h]+
8144             (?(?&word))
8145             )
8146             )
8147             )
8148              
8149             (?
8150             sub\(
8151             [[:blank:]\h]*
8152             (?(?=(?:[s]${REGSEP}))
8153             (?®sub)
8154             )
8155             [[:blank:]\h]*
8156             \,
8157             [[:blank:]\h]*
8158             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8159             (?
8160             (?>(?&word))
8161             )
8162             )
8163             [[:blank:]\h]*
8164             \)
8165             )
8166              
8167             (?
8168             (?:
8169             (?$REGEXP->{cstring})
8170             )
8171             |
8172             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
8173             (?:
8174             (?&variable)
8175             )
8176             )
8177             )
8178              
8179             (?
8180             (?:
8181             \%\{
8182             (?(?=${FUNCNAME}\:)
8183             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
8184             )
8185             \}
8186             )
8187             |
8188             (?:
8189             \%\{
8190             (?(?=${VARNAME}\})
8191             (?${VARNAME})
8192             )
8193             \}
8194             )
8195             |
8196             (?:
8197             \%\{\:
8198             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8199             (?(?&word))
8200             )
8201             \:\}
8202             )
8203             |
8204             (?:
8205             \%\{\:
8206             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
8207             (?&cond)
8208             )
8209             \:\}
8210             )
8211             |
8212             (?$REGEXP->{rebackref})
8213             )
8214              
8215             (?
8216             (?:
8217             $REGEXP->{digits}
8218             )
8219             |
8220             (?:
8221             \'
8222             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
8223             (?(?&string))
8224             )
8225             \'
8226             )
8227             |
8228             (?:
8229             \"
8230             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
8231             (?(?&string))
8232             )
8233             \"
8234             )
8235             |
8236             (?:
8237             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
8238             )
8239             |
8240             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
8241             (?&sub)
8242             )
8243             |
8244             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
8245             (?:
8246             (?&join)
8247             )
8248             )
8249             |
8250             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8251             (?:
8252             (?&function)
8253             )
8254             )
8255             |
8256             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8257             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
8258             )
8259             |
8260             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
8261             (?:
8262             (?(?&variable))
8263             )
8264             )
8265             )
8266              
8267             (?
8268             (?:
8269             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8270             (?&word)
8271             )
8272             [[:blank:]\h]*\,[[:blank:]\h]*
8273             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
8274             (?&list)
8275             )
8276             )
8277             |
8278             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8279             (?&word)
8280             )
8281             )
8282              
8283             )
8284             /x;
8285            
8286             ## stringcomp
8287             ## | integercomp
8288             ## | unaryop word
8289             ## | word binaryop word
8290             ## | word "in" listfunc
8291             ## | word "=~" regex
8292             ## | word "!~" regex
8293             ## | word "in" "{" list "}"
8294             ## Ref:
8295             ##
8296             ##
8297 20         1943 $TRUNK->{comp} = qr/
8298             (?
8299             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
8300             (?:
8301             (?(?&stringcomp))
8302             )
8303             )
8304             |
8305             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
8306             (?:
8307             (?(?&integercomp))
8308             )
8309             )
8310             |
8311             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
8312             (?
8313             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
8314             [[:blank:]\h]+
8315             (?(?&word))
8316             )
8317             )
8318             |
8319             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
8320             (?
8321             (?(?&word))
8322             [[:blank:]\h]+
8323             (?:
8324             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
8325             |
8326             \-(?ipmatch|strmatch|strcmatch|fnmatch)
8327             )
8328             [[:blank:]\h]+
8329             (?(?&word))
8330             )
8331             )
8332             |
8333             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
8334             (?
8335             (?(?&word))
8336             [[:blank:]\h]+
8337             in
8338             [[:blank:]\h]+
8339             (?(?&listfunc))
8340             )
8341             )
8342             |
8343             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
8344             (?
8345             (?(?&word))
8346             [[:blank:]\h]+
8347             (?[\=|\!]\~)
8348             [[:blank:]\h]+
8349             (?$TRUNK->{regex})
8350             )
8351             )
8352             |
8353             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
8354             (?
8355             (?(?&word))
8356             [[:blank:]\h]+
8357             in
8358             [[:blank:]\h]+
8359             \{
8360             [[:blank:]\h]*
8361             (?(?&list))
8362             [[:blank:]\h]*
8363             \}
8364             )
8365             )
8366             )
8367             (?(DEFINE)
8368             (?
8369             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
8370             (?:
8371             (?&stringcomp) # Recurse on the entire stringcomp regexp
8372             )
8373             )
8374             |
8375             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
8376             (?:
8377             (?&integercomp)
8378             )
8379             )
8380             |
8381             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
8382             (?:
8383             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
8384             [[:blank:]\h]+
8385             (?&word)
8386             )
8387             )
8388             |
8389             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
8390             (?:
8391             (?&word)
8392             [[:blank:]\h]+
8393             (?:
8394             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
8395             |
8396             \-(?ipmatch|strmatch|strcmatch|fnmatch)
8397             )
8398             [[:blank:]\h]+
8399             (?&word)
8400             )
8401             )
8402             |
8403             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
8404             (?:
8405             (?&word)
8406             [[:blank:]\h]+
8407             in
8408             [[:blank:]\h]+
8409             (?&listfunc)
8410             )
8411             )
8412             |
8413             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
8414             (?:
8415             (?&word)
8416             [[:blank:]\h]+
8417             [\=|\!]\~
8418             [[:blank:]\h]+
8419             $TRUNK->{regex}
8420             )
8421             )
8422             |
8423             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
8424             (?:
8425             (?&word)
8426             [[:blank:]\h]+
8427             in
8428             [[:blank:]\h]+
8429             \{
8430             [[:blank:]\h]*
8431             (?&list)
8432             [[:blank:]\h]*
8433             \}
8434             )
8435             )
8436             )
8437             (?
8438             (?:$Regexp::Common::Apache2::ap_true)
8439             |
8440             (?:$Regexp::Common::Apache2::ap_false)
8441             |
8442             (?:\![[:blank:]\h]*(?-1)) # Recurring the entire COND expression
8443             |
8444             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
8445             |
8446             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
8447             |
8448             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+))) # Recurse on the entire comp regexp
8449             (?:
8450             (?&comp_recur)
8451             )
8452             )
8453             |
8454             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
8455             )
8456             (?
8457             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8458             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
8459             )
8460             )
8461              
8462             (?
8463             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8464             (?:
8465             (?(?&word))
8466             [[:blank:]\h]+
8467             \-?(?:eq|ne|lt|le|gt|ge)
8468             [[:blank:]\h]+
8469             (?(?&word))
8470             )
8471             )
8472             )
8473              
8474             (?
8475             join\(
8476             [[:blank:]\h]*
8477             (?:
8478             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
8479             |
8480             (?:(?&list))
8481             )
8482             [[:blank:]\h]*
8483             \)
8484             )
8485              
8486             (?
8487             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8488             (?:
8489             (?(?&listfunc))
8490             )
8491             )
8492             |
8493             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8494             (?:
8495             \{
8496             [[:blank:]\h]*
8497             (?(?&words))
8498             [[:blank:]\h]*
8499             \}
8500             )
8501             )
8502             |
8503             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
8504             (?:
8505             (?(?&split))
8506             )
8507             )
8508             |
8509             (?(?=\([[:blank:]\h]*)
8510             (?:
8511             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
8512             )
8513             )
8514             )
8515              
8516             (?
8517             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8518             (?:
8519             (?[a-zA-Z\_]\w+)
8520             \(
8521             [[:blank:]\h]*
8522             (?&words)
8523             [[:blank:]\h]*
8524             \)
8525             )
8526             )
8527             )
8528              
8529             (?
8530             (?:
8531             $REGEXP->{regex}
8532             |
8533             (?(?=(?:[s]${REGSEP}))
8534             (?®sub)
8535             )
8536             )
8537             )
8538              
8539             (?
8540             s(?${REGSEP})
8541             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
8542             \g{regsep}
8543             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
8544             \g{regsep}
8545             (?${REGFLAGS})?
8546             )
8547              
8548             (?
8549             split\(
8550             [[:blank:]\h]*
8551             (?(?®any))
8552             [[:blank:]\h]*\,[[:blank:]\h]*
8553             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8554             (?:
8555             (?&word)
8556             )
8557             |
8558             (?:
8559             (?&list)
8560             )
8561             )
8562             [[:blank:]\h]*
8563             \)
8564             )
8565              
8566             (?
8567             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
8568             (?:(?&substring)[[:blank:]\h]+(?&string))
8569             )
8570             |
8571             (?(?=(?:$TEXT|&variable))
8572             (?&substring)
8573             )
8574             )
8575              
8576             (?
8577             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8578             (?:
8579             (?(?&word))
8580             [[:blank:]\h]+
8581             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
8582             [[:blank:]\h]+
8583             (?(?&word))
8584             )
8585             )
8586             )
8587              
8588             (?
8589             sub\(
8590             [[:blank:]\h]*
8591             (?(?=(?:[s]${REGSEP}))
8592             (?®sub)
8593             )
8594             [[:blank:]\h]*
8595             \,
8596             [[:blank:]\h]*
8597             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8598             (?
8599             (?>(?&word))
8600             )
8601             )
8602             [[:blank:]\h]*
8603             \)
8604             )
8605              
8606             (?
8607             (?:
8608             (?$REGEXP->{cstring})
8609             )
8610             |
8611             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
8612             (?:
8613             (?&variable)
8614             )
8615             )
8616             )
8617              
8618             (?
8619             (?:
8620             \%\{
8621             (?(?=${FUNCNAME}\:)
8622             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
8623             )
8624             \}
8625             )
8626             |
8627             (?:
8628             \%\{
8629             (?(?=${VARNAME}\})
8630             (?${VARNAME})
8631             )
8632             \}
8633             )
8634             |
8635             (?:
8636             \%\{\:
8637             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8638             (?(?&word))
8639             )
8640             \:\}
8641             )
8642             |
8643             (?:
8644             \%\{\:
8645             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
8646             (?&cond)
8647             )
8648             \:\}
8649             )
8650             |
8651             (?$REGEXP->{rebackref})
8652             )
8653              
8654             (?
8655             (?:
8656             $REGEXP->{digits}
8657             )
8658             |
8659             (?:
8660             \'
8661             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
8662             (?(?&string))
8663             )
8664             \'
8665             )
8666             |
8667             (?:
8668             \"
8669             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
8670             (?(?&string))
8671             )
8672             \"
8673             )
8674             |
8675             (?:
8676             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
8677             )
8678             |
8679             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
8680             (?&sub)
8681             )
8682             |
8683             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
8684             (?:
8685             (?&join)
8686             )
8687             )
8688             |
8689             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8690             (?:
8691             (?&function)
8692             )
8693             )
8694             |
8695             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8696             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
8697             )
8698             |
8699             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
8700             (?:
8701             (?(?&variable))
8702             )
8703             )
8704             )
8705              
8706             (?
8707             (?:
8708             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8709             (?&word)
8710             )
8711             [[:blank:]\h]*\,[[:blank:]\h]*
8712             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
8713             (?&list)
8714             )
8715             )
8716             |
8717             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8718             (?&word)
8719             )
8720             )
8721              
8722             )
8723             /x;
8724              
8725             ## cond
8726             ## | string
8727 20         6531 $TRUNK->{expr} = qr/
8728             (?
8729             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
8730             (?:
8731             (?(?&cond))
8732             )
8733             )
8734             |
8735             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
8736             (?:
8737             (?(?&string))
8738             )
8739             )
8740             )
8741             (?(DEFINE)
8742             (?
8743             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8744             (?:
8745             (?&stringcomp)
8746             )
8747             )
8748             |
8749             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8750             (?:
8751             (?&integercomp)
8752             )
8753             )
8754             |
8755             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
8756             (?:
8757             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
8758             [[:blank:]\h]+
8759             (?&word)
8760             )
8761             )
8762             |
8763             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
8764             (?:
8765             (?&word)
8766             [[:blank:]\h]+
8767             (?:
8768             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
8769             |
8770             \-(?ipmatch|strmatch|strcmatch|fnmatch)
8771             )
8772             [[:blank:]\h]+
8773             (?&word)
8774             )
8775             )
8776             |
8777             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
8778             (?:
8779             (?&word)
8780             [[:blank:]\h]+
8781             in
8782             [[:blank:]\h]+
8783             (?&listfunc)
8784             )
8785             )
8786             |
8787             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
8788             (?:
8789             (?&word)
8790             [[:blank:]\h]+
8791             [\=|\!]\~
8792             [[:blank:]\h]+
8793             $REGEXP->{regex}
8794             )
8795             )
8796             |
8797             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
8798             (?:
8799             (?&word)
8800             [[:blank:]\h]+
8801             in
8802             [[:blank:]\h]+
8803             \{
8804             [[:blank:]\h]*
8805             (?&list)
8806             [[:blank:]\h]*
8807             \}
8808             )
8809             )
8810             )
8811              
8812             (?
8813             (?:$Regexp::Common::Apache2::ap_true)
8814             |
8815             (?:$Regexp::Common::Apache2::ap_false)
8816             |
8817             (?:\![[:blank:]\h]*(?-1))
8818             |
8819             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
8820             |
8821             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
8822             |
8823             (?(?=(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))
8824             (?:
8825             (?&comp)
8826             )
8827             )
8828             |
8829             (?:\([[:blank:]\h]*(?&cond)[[:blank:]\h]*\)) # Need to call ourself rather than use (?-1), because the latter will loop without moving forward in the string
8830             )
8831              
8832             (?
8833             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8834             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
8835             )
8836             )
8837              
8838             (?
8839             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8840             (?:
8841             (?(?&word))
8842             [[:blank:]\h]+
8843             \-?(?:eq|ne|lt|le|gt|ge)
8844             [[:blank:]\h]+
8845             (?(?&word))
8846             )
8847             )
8848             )
8849              
8850             (?
8851             join\(
8852             [[:blank:]\h]*
8853             (?:
8854             (?:(?&list)[[:blank:]]*\,[[:blank:]]*(?&word))
8855             |
8856             (?:(?&list))
8857             )
8858             [[:blank:]\h]*
8859             \)
8860             )
8861              
8862             (?
8863             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8864             (?:
8865             (?(?&listfunc))
8866             )
8867             )
8868             |
8869             (?(?=\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8870             (?:
8871             \{
8872             [[:blank:]\h]*
8873             (?(?&words))
8874             [[:blank:]\h]*
8875             \}
8876             )
8877             )
8878             |
8879             (?(?=(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP}))))
8880             (?:
8881             (?(?&split))
8882             )
8883             )
8884             |
8885             (?(?=\([[:blank:]\h]*)
8886             (?:
8887             \([[:blank:]\h]*(?&list)[[:blank:]\h]*\)
8888             )
8889             )
8890             )
8891              
8892             (?
8893             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8894             (?:
8895             (?[a-zA-Z\_]\w+)
8896             \(
8897             [[:blank:]\h]*
8898             (?&words)
8899             [[:blank:]\h]*
8900             \)
8901             )
8902             )
8903             )
8904              
8905             (?
8906             (?:
8907             $REGEXP->{regex}
8908             |
8909             (?(?=(?:[s]${REGSEP}))
8910             (?®sub)
8911             )
8912             )
8913             )
8914              
8915             (?
8916             s(?${REGSEP})
8917             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
8918             \g{regsep}
8919             (?(?>\\\g{regsep}|(?!\g{regsep}).)*+)
8920             \g{regsep}
8921             (?${REGFLAGS})?
8922             )
8923              
8924             (?
8925             split\(
8926             [[:blank:]\h]*
8927             (?(?®any))
8928             [[:blank:]\h]*\,[[:blank:]\h]*
8929             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8930             (?:
8931             (?&word)
8932             )
8933             |
8934             (?:
8935             (?&list)
8936             )
8937             )
8938             [[:blank:]\h]*
8939             \)
8940             )
8941              
8942             (?
8943             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
8944             (?:(?&substring)[[:blank:]\h]+(?&string))
8945             )
8946             |
8947             (?(?=(?:$TEXT|&variable))
8948             (?&substring)
8949             )
8950             )
8951              
8952             (?
8953             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
8954             (?:
8955             (?(?&word))
8956             [[:blank:]\h]+
8957             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
8958             [[:blank:]\h]+
8959             (?(?&word))
8960             )
8961             )
8962             )
8963              
8964             (?
8965             sub\(
8966             [[:blank:]\h]*
8967             (?(?=(?:[s]${REGSEP}))
8968             (?®sub)
8969             )
8970             [[:blank:]\h]*
8971             \,
8972             [[:blank:]\h]*
8973             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
8974             (?
8975             (?>(?&word))
8976             )
8977             )
8978             [[:blank:]\h]*
8979             \)
8980             )
8981              
8982             (?
8983             (?:
8984             (?$REGEXP->{cstring})
8985             )
8986             |
8987             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
8988             (?:
8989             (?&variable)
8990             )
8991             )
8992             )
8993              
8994             (?
8995             (?:
8996             \%\{
8997             (?(?=${FUNCNAME}\:)
8998             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
8999             )
9000             \}
9001             )
9002             |
9003             (?:
9004             \%\{
9005             (?(?=${VARNAME}\})
9006             (?${VARNAME})
9007             )
9008             \}
9009             )
9010             |
9011             (?:
9012             \%\{\:
9013             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
9014             (?(?&word))
9015             )
9016             \:\}
9017             )
9018             |
9019             (?:
9020             \%\{\:
9021             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+)))))
9022             (?&cond)
9023             )
9024             \:\}
9025             )
9026             |
9027             (?$REGEXP->{rebackref})
9028             )
9029              
9030             (?
9031             (?:
9032             $REGEXP->{digits}
9033             )
9034             |
9035             (?:
9036             \'
9037             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
9038             (?(?&string))
9039             )
9040             \'
9041             )
9042             |
9043             (?:
9044             \"
9045             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
9046             (?(?&string))
9047             )
9048             \"
9049             )
9050             |
9051             (?:
9052             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
9053             )
9054             |
9055             (?(?=(?:\bsub\([[:blank:]\h]*(?:[s]${REGSEP})))
9056             (?&sub)
9057             )
9058             |
9059             (?(?=(?:join\([[:blank:]\h]*(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))))
9060             (?:
9061             (?&join)
9062             )
9063             )
9064             |
9065             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{))))
9066             (?:
9067             (?&function)
9068             )
9069             )
9070             |
9071             (?(?=\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
9072             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
9073             )
9074             |
9075             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
9076             (?:
9077             (?(?&variable))
9078             )
9079             )
9080             )
9081              
9082             (?
9083             (?:
9084             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
9085             (?&word)
9086             )
9087             [[:blank:]\h]*\,[[:blank:]\h]*
9088             (?(?=(?:\([[:blank:]\h]*)?(?:(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))|(?:split\([[:blank:]\h]*(?:(?:\/${REGPATTERN})|(?:[m]${REGSEP})))|(?:\{[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))))
9089             (?&list)
9090             )
9091             )
9092             |
9093             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|sub|join|${FUNCNAME}|\%\{)))
9094             (?&word)
9095             )
9096             )
9097              
9098             )
9099             /x;
9100            
9101             ## Here is the addition to be compliant with expression from 2.3.12 and before,
9102             ## ie old fashioned variable such as $REQUEST_URI instead of the modern version %{REQUEST_URI}
9103 20         24696 $REGEXP_LEGACY->{variable} = qr/
9104             (?
9105             (?:\$(?:[a-zA-Z\_]\w*))
9106             |
9107             (?:
9108             \%\{
9109             (?(?=${FUNCNAME}\:)
9110             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
9111             )
9112             \}
9113             )
9114             |
9115             (?:
9116             \%\{
9117             (?(?=${VARNAME})
9118             (?${VARNAME})
9119             )
9120             \}
9121             )
9122             |
9123             (?$REGEXP->{rebackref})
9124             )
9125             (?(DEFINE)
9126             (?
9127             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9128             (?:
9129             (?&stringcomp)
9130             )
9131             )
9132             |
9133             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9134             (?:
9135             (?&integercomp)
9136             )
9137             )
9138             |
9139             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
9140             (?:
9141             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
9142             [[:blank:]\h]+
9143             (?&word)
9144             )
9145             )
9146             |
9147             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
9148             (?:
9149             (?&word)
9150             [[:blank:]\h]+
9151             (?:
9152             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
9153             |
9154             \-(?ipmatch|strmatch|strcmatch|fnmatch)
9155             )
9156             [[:blank:]\h]+
9157             (?&word)
9158             )
9159             )
9160             |
9161             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
9162             (?:
9163             (?&word)
9164             [[:blank:]\h]+
9165             in
9166             [[:blank:]\h]+
9167             (?&listfunc)
9168             )
9169             )
9170             |
9171             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
9172             (?:
9173             (?&word)
9174             [[:blank:]\h]+
9175             [\=|\!]\~
9176             [[:blank:]\h]+
9177             $REGEXP->{regex}
9178             )
9179             )
9180             |
9181             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
9182             (?:
9183             (?&word)
9184             [[:blank:]\h]+
9185             in
9186             [[:blank:]\h]+
9187             \{
9188             [[:blank:]\h]*
9189             (?&words)
9190             [[:blank:]\h]*
9191             \}
9192             )
9193             )
9194             )
9195              
9196             (?
9197             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9198             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
9199             )
9200             )
9201              
9202             (?
9203             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9204             (?:
9205             (?(?&word))
9206             [[:blank:]\h]+
9207             \-?(?:eq|ne|lt|le|gt|ge)
9208             [[:blank:]\h]+
9209             (?(?&word))
9210             )
9211             )
9212             )
9213              
9214             (?
9215             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9216             (?:
9217             (?[a-zA-Z\_]\w+)
9218             \(
9219             [[:blank:]\h]*
9220             (?&words)
9221             [[:blank:]\h]*
9222             \)
9223             )
9224             )
9225             )
9226              
9227             (?
9228             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
9229             (?:(?&substring)[[:blank:]\h]+(?&string))
9230             )
9231             |
9232             (?(?=(?:$TEXT|&variable))
9233             (?&substring)
9234             )
9235             )
9236              
9237             (?
9238             (?:$REGEXP->{cstring})
9239             |
9240             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))(?&variable_recur))
9241             )
9242             (?
9243             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9244             (?:
9245             (?(?&word))
9246             [[:blank:]\h]+
9247             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
9248             [[:blank:]\h]+
9249             (?(?&word))
9250             )
9251             )
9252             )
9253              
9254             (?
9255             (?:
9256             \%\{
9257             (?(?=${FUNCNAME}\:)
9258             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
9259             )
9260             \}
9261             )
9262             |
9263             (?:
9264             \%\{
9265             (?(?=${VARNAME}\})
9266             (?${VARNAME})
9267             )
9268             \}
9269             )
9270             |
9271             (?$REGEXP->{rebackref})
9272             )
9273             (?
9274             (?:$REGEXP->{digits})
9275             |
9276             (?:
9277             \'
9278             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
9279             (?(?&string))
9280             )
9281             \'
9282             )
9283             |
9284             (?:
9285             \"
9286             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
9287             (?(?&string))
9288             )
9289             \"
9290             )
9291             |
9292             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9293             (?:
9294             (?&function)
9295             )
9296             )
9297             |
9298             (?:[^[:cntrl:]]+)\.(?:[^[:cntrl:]]+)
9299             |
9300             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
9301             (?:
9302             (?(?&variable_recur))
9303             )
9304             )
9305             )
9306             (?
9307             (?:
9308             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9309             (?&word)
9310             )
9311             [[:blank:]\h]*\,[[:blank:]\h]*
9312             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9313             (?&word)
9314             )
9315             )
9316             |
9317             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9318             (?&word)
9319             )
9320             )
9321              
9322             )
9323             /x;
9324              
9325             ## Here we allow regular expression to be writen like: expression = //, ie without the ~
9326 20         836 $REGEXP_LEGACY->{comp} = qr/
9327             (?
9328             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9329             (?:
9330             (?(?&stringcomp))
9331             )
9332             )
9333             |
9334             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9335             (?:
9336             (?(?&integercomp))
9337             )
9338             )
9339             |
9340             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
9341             (?
9342             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
9343             [[:blank:]\h]+
9344             (?(?&word))
9345             )
9346             )
9347             |
9348             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
9349             (?
9350             (?(?&word))
9351             [[:blank:]\h]+
9352             (?:
9353             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
9354             |
9355             \-(?ipmatch|strmatch|strcmatch|fnmatch)
9356             )
9357             [[:blank:]\h]+
9358             (?(?&word))
9359             )
9360             )
9361             |
9362             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
9363             (?
9364             (?(?&word))
9365             [[:blank:]\h]+
9366             in
9367             [[:blank:]\h]+
9368             (?(?&listfunc))
9369             )
9370             )
9371             |
9372             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
9373             (?
9374             (?(?&word))
9375             [[:blank:]\h]+
9376             (?[\=|\!]\~)
9377             [[:blank:]\h]+
9378             (?$REGEXP->{regex})
9379             )
9380             )
9381             |
9382             (?
9383             (?=(?:(?:.*?)[[:blank:]\h]+[\=\=|\=|\!\=][[:blank:]\h]+))
9384             (?(?&word))
9385             [[:blank:]\h]+
9386             (?[\=\=|\=|\!\=])
9387             [[:blank:]\h]+
9388             (?(?®ex))
9389             )
9390             |
9391             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
9392             (?
9393             (?(?&word))
9394             [[:blank:]\h]+
9395             in
9396             [[:blank:]\h]+
9397             \{
9398             [[:blank:]\h]*
9399             (?(?&words))
9400             [[:blank:]\h]*
9401             \}
9402             )
9403             )
9404             )
9405             (?(DEFINE)
9406             (?
9407             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9408             (?:
9409             (?&stringcomp) # Recurse on the entire stringcomp regexp
9410             )
9411             )
9412             |
9413             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9414             (?:
9415             (?&integercomp)
9416             )
9417             )
9418             |
9419             (?(?=(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])))
9420             (?:
9421             \-(?[d|e|f|s|L|h|F|U|A|n|z|T|R])
9422             [[:blank:]\h]+
9423             (?&word)
9424             )
9425             )
9426             |
9427             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch)))))
9428             (?:
9429             (?&word)
9430             [[:blank:]\h]+
9431             (?:
9432             (?\=\=|\=|\!\=|\<|\<\=|\>|\>\=)
9433             |
9434             \-(?ipmatch|strmatch|strcmatch|fnmatch)
9435             )
9436             [[:blank:]\h]+
9437             (?&word)
9438             )
9439             )
9440             |
9441             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+))
9442             (?:
9443             (?&word)
9444             [[:blank:]\h]+
9445             in
9446             [[:blank:]\h]+
9447             (?&listfunc)
9448             )
9449             )
9450             |
9451             (?:(?=(?:(?:.*?)[[:blank:]\h]+[\=|\!]\~[[:blank:]\h]+))
9452             (?:
9453             (?&word)
9454             [[:blank:]\h]+
9455             [\=|\!]\~
9456             [[:blank:]\h]+
9457             $REGEXP->{regex}
9458             )
9459             )
9460             |
9461             (?:(?=(?:(?:.*?)[[:blank:]\h]+in[[:blank:]\h]+\{))
9462             (?:
9463             (?&word)
9464             [[:blank:]\h]+
9465             in
9466             [[:blank:]\h]+
9467             \{
9468             [[:blank:]\h]*
9469             (?&words)
9470             [[:blank:]\h]*
9471             \}
9472             )
9473             )
9474             )
9475             (?
9476             (?:$Regexp::Common::Apache2::ap_true)
9477             |
9478             (?:$Regexp::Common::Apache2::ap_false)
9479             |
9480             (?:\![[:blank:]\h]*(?-1)) # Recurring the entire COND expression
9481             |
9482             (?:(?-1)[[:blank:]\h]*\&\&[[:blank:]\h]*(?-1))
9483             |
9484             (?:(?-1)[[:blank:]\h]*\|\|[[:blank:]\h]*(?-1))
9485             |
9486             (?(?=(?:(?:\([[:blank:]\h]*)?\!?(?:(?:(?:$Regexp::Common::Apache2::ap_true|$Regexp::Common::Apache2::ap_false)(?!\d))|(?:(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:(?:\=\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-?(?:eq|ne|lt|le|gt|ge)))[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))|(?:\-(?[d|e|f|s|L|h|F|U|A|n|z|T|R]))|(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]+(?:(?:\=\=|\=|\!\=|\<|\<\=|\>|\>\=)|(?:\-(?:ipmatch|strmatch|strcmatch|fnmatch))))|(?:(?:.*?)[[:blank:]\h]+(?:in|[\=|\!]\~)[[:blank:]\h]+))))) # Recurse on the entire comp regexp
9487             (?:
9488             (?&comp_recur)
9489             )
9490             )
9491             |
9492             (?:\([[:blank:]\h]*(?-1)[[:blank:]\h]*\))
9493             )
9494             (?
9495             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9496             [a-zA-Z\_]\w+\([[:blank:]\h]*(?&words)[[:blank:]\h]*\)
9497             )
9498             )
9499              
9500             (?
9501             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*\-?(?:eq|ne|lt|le|gt|ge)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9502             (?:
9503             (?(?&word))
9504             [[:blank:]\h]+
9505             \-?(?:eq|ne|lt|le|gt|ge)
9506             [[:blank:]\h]+
9507             (?(?&word))
9508             )
9509             )
9510             )
9511              
9512             (?
9513             (?(?=[a-zA-Z\_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9514             (?:
9515             (?[a-zA-Z\_]\w+)
9516             \(
9517             [[:blank:]\h]*
9518             (?&words)
9519             [[:blank:]\h]*
9520             \)
9521             )
9522             )
9523             )
9524              
9525             (?
9526             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
9527             (?:(?&substring)[[:blank:]\h]+(?&string))
9528             )
9529             |
9530             (?(?=(?:$TEXT|&variable))
9531             (?&substring)
9532             )
9533             )
9534              
9535             (?
9536             (?(?=(?:(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))(?:.*?)[[:blank:]\h]*(?:\=\=|\!\=|\<|\<\=|\>|\>\=)[[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9537             (?:
9538             (?(?&word))
9539             [[:blank:]\h]+
9540             (?:\=\=|\!\=|\<|\<\=|\>|\>\=)
9541             [[:blank:]\h]+
9542             (?(?&word))
9543             )
9544             )
9545             )
9546              
9547             (?
9548             (?:
9549             (?$REGEXP->{cstring})
9550             )
9551             |
9552             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
9553             (?:
9554             (?&variable)
9555             )
9556             )
9557             |
9558             (?(?=\$\{?${DIGIT}\}?\b)
9559             \$${DIGIT}
9560             )
9561             )
9562              
9563             (?
9564             (?:
9565             \%\{
9566             (?(?=${FUNCNAME}\:)
9567             (?${FUNCNAME})\:(?(?>\\\}|[^\}])*+)
9568             )
9569             \}
9570             )
9571             |
9572             (?:
9573             \%\{
9574             (?(?=${VARNAME}\})
9575             (?${VARNAME})
9576             )
9577             \}
9578             )
9579             )
9580              
9581             (?
9582             (?:
9583             $REGEXP->{digits}
9584             )
9585             |
9586             (?:
9587             \'
9588             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
9589             (?(?&string))
9590             )
9591             \'
9592             )
9593             |
9594             (?:
9595             \"
9596             (?(?=(?:(?:(?:$TEXT|&variable)[[:blank:]\h]+(?:$TEXT|&variable))|(?:$TEXT|&variable)))
9597             (?(?&string))
9598             )
9599             \"
9600             )
9601             |
9602             (?(?=(?:[a-zA-Z_]\w+\([[:blank:]\h]*(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{))))
9603             (?:
9604             (?&function)
9605             )
9606             )
9607             |
9608             (?(?=(?:(?:\%\{)|(?:\$\{?)${VARNAME}))
9609             (?:
9610             (?(?&variable))
9611             )
9612             )
9613             |
9614             (?(?=\$\{?${DIGIT}\}?\b)
9615             \$${DIGIT}
9616             )
9617             |
9618             (?:
9619             (?:[^[:cntrl:]]+\.[^[:cntrl:]]+)
9620             )
9621             )
9622              
9623             (?
9624             (?:
9625             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9626             (?&word)
9627             )
9628             [[:blank:]\h]*\,[[:blank:]\h]*
9629             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9630             (?&word)
9631             )
9632             )
9633             |
9634             (?(?=(?:(?:\([[:blank:]\h]*)?(?:[0-9\"\']|${FUNCNAME}\(|\%\{)))
9635             (?&word)
9636             )
9637             )
9638              
9639             )
9640             /x;
9641              
9642             pattern name => [qw( Apache2 -legacy=1 -trunk=1 ) ],
9643             create => sub
9644             {
9645 0         0 my( $self, $flags ) = @_;
9646 0         0 my %re = %$REGEXP;
9647             ## Override vanilla regular expressions by the extended ones
9648 0 0       0 if( $flags->{'-legacy'} )
    0          
9649             {
9650 0         0 my @k = keys( %$REGEXP_LEGACY );
9651 0         0 @re{ @k } = @$REGEXP_LEGACY{ @k };
9652             }
9653             elsif( $flags->{'-trunk'} )
9654             {
9655 0         0 my @k = keys( %$TRUNK );
9656 0         0 @re{ @k } = @$TRUNK{ @k };
9657             }
9658 0         0 my $pat = join( '|' => values( %re ) );
9659 0         0 return( "(?k:$pat)" );
9660 20         2283 };
9661              
9662             pattern name => [qw( Apache2 Comp )],
9663 20         2573 create => $REGEXP->{comp};
9664              
9665             pattern name => [qw( Apache2 Cond )],
9666 20         2464 create => $REGEXP->{cond};
9667              
9668             pattern name => [qw( Apache2 Digits )],
9669 20         1014 create => $REGEXP->{digits};
9670              
9671             pattern name => [qw( Apache2 Expression )],
9672 20         945 create => $REGEXP->{expr};
9673              
9674             pattern name => [qw( Apache2 Function )],
9675 20         960 create => $REGEXP->{function};
9676              
9677             pattern name => [qw( Apache2 IntegerComp )],
9678 20         1054 create => $REGEXP->{integercomp};
9679              
9680             pattern name => [qw( Apache2 ListFunc )],
9681 20         1171 create => $REGEXP->{listfunc};
9682              
9683             pattern name => [qw( Apache2 Regexp )],
9684 20         1425 create => $REGEXP->{regex};
9685              
9686             pattern name => [qw( Apache2 String )],
9687 20         987 create => $REGEXP->{string};
9688              
9689             pattern name => [qw( Apache2 StringComp )],
9690 20         1304 create => $REGEXP->{stringcomp};
9691              
9692             pattern name => [qw( Apache2 Substring )],
9693 20         1370 create => $REGEXP->{substring};
9694              
9695             pattern name => [qw( Apache2 Variable )],
9696 20         1282 create => $REGEXP->{variable};
9697              
9698             pattern name => [qw( Apache2 Word )],
9699 20         1370 create => $REGEXP->{word};
9700              
9701             pattern name => [qw( Apache2 Words )],
9702 20         1288 create => $REGEXP->{words};
9703              
9704             ## Apache2 Trunk expressions
9705             pattern name => [qw( Apache2 TrunkComp )],
9706 20         1421 create => $TRUNK->{comp};
9707              
9708             pattern name => [qw( Apache2 TrunkCond )],
9709 20         1615 create => $TRUNK->{cond};
9710              
9711             pattern name => [qw( Apache2 TrunkDigits )],
9712 20         1566 create => $TRUNK->{digits};
9713              
9714             pattern name => [qw( Apache2 TrunkExpression )],
9715 20         902 create => $TRUNK->{expr};
9716              
9717             pattern name => [qw( Apache2 TrunkFunction )],
9718 20         1613 create => $TRUNK->{function};
9719              
9720             pattern name => [qw( Apache2 TrunkIntegerComp )],
9721 20         1521 create => $TRUNK->{integercomp};
9722              
9723             pattern name => [qw( Apache2 TrunkJoin )],
9724 20         1429 create => $TRUNK->{join};
9725              
9726             pattern name => [qw( Apache2 TrunkList )],
9727 20         1403 create => $TRUNK->{list};
9728              
9729             pattern name => [qw( Apache2 TrunkListFunc )],
9730 20         1470 create => $TRUNK->{listfunc};
9731              
9732             pattern name => [qw( Apache2 TrunkRegany )],
9733 20         1421 create => $TRUNK->{regany};
9734              
9735             pattern name => [qw( Apache2 TrunkRegexp )],
9736 20         890 create => $TRUNK->{regex};
9737              
9738             pattern name => [qw( Apache2 TrunkRegsub )],
9739 20         1091 create => $TRUNK->{regsub};
9740              
9741             pattern name => [qw( Apache2 TrunkSplit )],
9742 20         956 create => $TRUNK->{split};
9743              
9744             pattern name => [qw( Apache2 TrunkString )],
9745 20         1471 create => $TRUNK->{string};
9746              
9747             pattern name => [qw( Apache2 TrunkStringComp )],
9748 20         1561 create => $TRUNK->{stringcomp};
9749              
9750             pattern name => [qw( Apache2 TrunkSub )],
9751 20         1405 create => $TRUNK->{sub};
9752              
9753             pattern name => [qw( Apache2 TrunkSubstring )],
9754 20         1570 create => $TRUNK->{substring};
9755              
9756             pattern name => [qw( Apache2 TrunkVariable )],
9757 20         1626 create => $TRUNK->{variable};
9758              
9759             pattern name => [qw( Apache2 TrunkWord )],
9760 20         1515 create => $TRUNK->{word};
9761              
9762             pattern name => [qw( Apache2 TrunkWords )],
9763 20         1614 create => $TRUNK->{words};
9764              
9765             ## Legacy expressions
9766             pattern name => [qw( Apache2 LegacyComp )],
9767 20         1417 create => $REGEXP_LEGACY->{comp};
9768              
9769             pattern name => [qw( Apache2 LegacyVariable )],
9770 20         1404 create => $REGEXP_LEGACY->{variable};
9771             };
9772              
9773             {
9774             package
9775             Regexp::Common::Apache2::Boolean;
9776             BEGIN
9777             {
9778 20     20   330 use strict;
  20         53  
  20         875  
9779 20     20   122 use warnings;
  20         48  
  20         2214  
9780             use overload
9781 2164     2164   3155 "0+" => sub{ ${$_[0]} },
  2164         4935702  
9782 0     0   0 "++" => sub{ $_[0] = ${$_[0]} + 1 },
  0         0  
9783 0     0   0 "--" => sub{ $_[0] = ${$_[0]} - 1 },
  0         0  
9784 20     20   142 fallback => 1;
  20         34  
  20         308  
9785 20     20   7343 our( $VERSION ) = '0.1.0';
9786             };
9787              
9788 0 0   0     sub new { return( $_[1] ? $true : $false ); }
9789              
9790 0     0     sub defined { return( 1 ); }
9791              
9792             our $true = do{ bless( \( my $dummy = 1 ) => Regexp::Common::Apache2::Boolean ) };
9793             our $false = do{ bless( \( my $dummy = 0 ) => Regexp::Common::Apache2::Boolean ) };
9794              
9795 0     0     sub true () { $true }
9796 0     0     sub false () { $false }
9797              
9798 0     0     sub is_bool ($) { UNIVERSAL::isa( $_[0], Regexp::Common::Apache2::Boolean ) }
9799 0 0   0     sub is_true ($) { $_[0] && UNIVERSAL::isa( $_[0], Regexp::Common::Apache2::Boolean ) }
9800 0 0   0     sub is_false ($) { !$_[0] && UNIVERSAL::isa( $_[0], Regexp::Common::Apache2::Boolean ) }
9801              
9802             sub TO_JSON
9803             {
9804             ## JSON does not check that the value is a proper true or false. It stupidly assumes this is a string
9805             ## The only way to make it understand is to return a scalar ref of 1 or 0
9806             # return( $_[0] ? 'true' : 'false' );
9807 0 0   0     return( $_[0] ? \1 : \0 );
9808             }
9809             }
9810              
9811             1;
9812              
9813             __END__