3 <!DOCTYPE MODE SYSTEM "xmode.dtd">
7 <PROPERTY NAME="lineComment" VALUE="#" />
8 <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
9 <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
10 <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
11 <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
12 <PROPERTY NAME="indentNextLine" VALUE="[^#]*\.\s*$" />
15 <!-- no ESCAPE char because we need the backslash for references -->
16 <RULES HIGHLIGHT_DIGITS="TRUE" IGNORE_CASE="FALSE">
18 <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>
20 <!-- TYPE is LABEL so that =head1 and =cut are highlighted as so -->
21 <SPAN TYPE="LABEL" DELEGATE="POD" AT_LINE_START="TRUE">
25 <SPAN AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">
29 <SPAN TYPE="LABEL" DELEGATE="POD" AT_LINE_START="TRUE">
33 <SPAN AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">
37 <SPAN TYPE="LABEL" AT_LINE_START="TRUE" DELEGATE="POD">
41 <SPAN AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">
45 <SPAN TYPE="LABEL" DELEGATE="POD" AT_LINE_START="TRUE">
49 <SPAN AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">
53 <SPAN TYPE="LABEL" DELEGATE="POD" AT_LINE_START="TRUE">
57 <SPAN TYPE="LABEL" DELEGATE="POD" AT_LINE_START="TRUE">
61 <SPAN AT_LINE_START="TRUE" TYPE="LABEL" DELEGATE="POD">
66 <!-- Some other things that confuse the mode file. -->
67 <SEQ TYPE="OPERATOR">*"</SEQ>
68 <SEQ TYPE="OPERATOR">*'</SEQ>
69 <SEQ TYPE="OPERATOR">&"</SEQ>
70 <SEQ TYPE="OPERATOR">&'</SEQ>
72 <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">
77 <!-- Scalar variables -->
78 <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD2">\$#?((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
80 <!-- Array variables -->
81 <SEQ_REGEXP HASH_CHAR="@" TYPE="KEYWORD2">@((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
83 <!-- Associative Array (= Hash) variables -->
84 <SEQ_REGEXP HASH_CHAR="%" TYPE="KEYWORD2">%((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
87 <SEQ_REGEXP HASH_CHAR="$$" TYPE="KEYWORD4">\$\$+((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
88 <SEQ_REGEXP HASH_CHAR="@$" TYPE="KEYWORD4">@\$((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
89 <SEQ_REGEXP HASH_CHAR="%$" TYPE="KEYWORD4">%\$((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
90 <SEQ_REGEXP HASH_CHAR="*" TYPE="KEYWORD4">\*((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
92 <!-- Perl predefined variables -->
93 <SEQ_REGEXP HASH_CHAR="$^" TYPE="KEYWORD2">\$\^\p{Alpha}</SEQ_REGEXP>
94 <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD2">\$\p{Punct}</SEQ_REGEXP>
96 <!-- references to vars and code, starting with a backslash -->
97 <SEQ_REGEXP HASH_CHAR="\" TYPE="KEYWORD4">\\[@%\$&]((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
99 <!-- complex code dereference -->
100 <SPAN TYPE="KEYWORD4" NO_LINE_BREAK="TRUE" DELEGATE="MAIN">
101 <BEGIN>&{</BEGIN>
105 <!-- Function calls from variables -->
106 <SEQ_REGEXP HASH_CHAR="&$" TYPE="FUNCTION">&\$((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
108 <!-- Highlight calls to subs that contain ' in the name. -->
109 <SEQ_REGEXP HASH_CHAR="&" TYPE="FUNCTION"
110 >&\p{Alpha}[\p{Alnum}_]*'\p{Alpha}[\p{Alnum}_]*</SEQ_REGEXP>
113 <SPAN TYPE="LITERAL1" DELEGATE="LITERAL">
118 <!-- apostrophe literals -->
119 <SPAN TYPE="LITERAL1" DELEGATE="APOSTR">
123 <SEQ_REGEXP TYPE="LITERAL1">\b\w+\b(?=\s*=>)</SEQ_REGEXP>
125 <!-- options: -text -->
126 <SEQ_REGEXP HASH_CHAR="-" TYPE="LITERAL1">-[\p{Lower}]\w+</SEQ_REGEXP>
128 <!-- file stat expressions -->
129 <SEQ_REGEXP HASH_CHAR="-" TYPE="KEYWORD3">-[\p{Lower}]</SEQ_REGEXP>
131 <!-- non-quoted literals in hashes -->
132 <SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="{" NO_LINE_BREAK="TRUE" DELEGATE="LITERAL">
133 <BEGIN>\{(?=\s*[\p{Alpha}_\-][\p{Alnum}_]*\s*\})</BEGIN>
137 <!-- Code blocks. This is a hack to correctly highlight some
138 complex expressions that can have arbitrary perl code
139 inside brackets (like array deferences below). Declaring
140 this *before* the other rules is needed to maintain
141 correct bracket matching.
143 <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" DELEGATE="MAIN">
148 <!-- Array dereference -->
149 <SPAN TYPE="KEYWORD4" NO_LINE_BREAK="TRUE" DELEGATE="MAIN">
154 <!-- Hash dereference -->
155 <SPAN TYPE="KEYWORD4" NO_LINE_BREAK="TRUE" DELEGATE="MAIN">
160 <!-- labels, catches also package prefixes at line start :( -->
161 <MARK_PREVIOUS TYPE="LABEL" AT_LINE_START="TRUE" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>
163 <!-- __DATA__ and similar -->
164 <SEQ_REGEXP HASH_CHAR="__" TYPE="KEYWORD4">__\w+__</SEQ_REGEXP>
167 <SPAN TYPE="KEYWORD3" DELEGATE="EXEC">
172 <!-- file globs / IO operators -->
173 <SEQ_REGEXP HASH_CHAR="<" TYPE="KEYWORD4"><[\p{Punct}\p{Alnum}_]*></SEQ_REGEXP>
176 <SPAN_REGEXP HASH_CHAR="<<" TYPE="LITERAL2" DELEGATE="LITERAL">
177 <BEGIN><![CDATA[<<\p{Space}*(['"])([\p{Space}\p{Alnum}_]*)\1;?\s*]]></BEGIN>
178 <END AT_LINE_START="TRUE">$2</END>
180 <SPAN_REGEXP HASH_CHAR="<<" TYPE="LITERAL2" DELEGATE="LITERAL">
181 <BEGIN><![CDATA[<<([\p{Alpha}_][\p{Alnum}_]*);?\s*]]></BEGIN>
182 <END AT_LINE_START="TRUE">$1</END>
185 <!-- jEdit 4.1 adds regular expression syntax rules so we can
186 highlight this sort of crap. -->
188 <!-- /Regexp/, avoid confusion with a sequence of two divisions! -->
189 <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="/"
190 AT_WORD_START="TRUE">/.*?[^\\]/([cgimosx]+\b|(?=[^cgimosx])|$)(?!\s*[\d\$\@\(\{\-A-Z"'])</SEQ_REGEXP>
192 <!-- q//, qq//, qx// -->
193 <SPAN_REGEXP HASH_CHAR="q"
196 MATCH_TYPE="OPERATOR"
198 NO_LINE_BREAK="FALSE">
199 <BEGIN>q[qxw]?([#/\|!])</BEGIN>
202 <SPAN_REGEXP HASH_CHAR="q"
203 MATCH_TYPE="OPERATOR"
204 DELEGATE="QUOTED_BRACKET"
206 NO_LINE_BREAK="FALSE">
207 <BEGIN>q[qxw]?(\[)</BEGIN>
210 <SPAN_REGEXP HASH_CHAR="q"
211 MATCH_TYPE="OPERATOR"
212 DELEGATE="QUOTED_BRACE"
214 NO_LINE_BREAK="FALSE">
215 <BEGIN>q[qxw]?(\{)</BEGIN>
218 <SPAN_REGEXP HASH_CHAR="q"
219 MATCH_TYPE="OPERATOR"
220 DELEGATE="QUOTED_PAREN"
222 NO_LINE_BREAK="FALSE">
223 <BEGIN>q[qxw]?(\()</BEGIN>
227 <!-- qr// should match other regex highlight colors -->
228 <SPAN_REGEXP HASH_CHAR="q"
231 MATCH_TYPE="OPERATOR"
233 NO_LINE_BREAK="FALSE">
234 <BEGIN>qr([#/\|!])</BEGIN>
237 <SPAN_REGEXP HASH_CHAR="q"
238 DELEGATE="QUOTED_BRACKET"
239 MATCH_TYPE="OPERATOR"
241 NO_LINE_BREAK="FALSE">
242 <BEGIN>qr(\[)</BEGIN>
245 <SPAN_REGEXP HASH_CHAR="q"
246 DELEGATE="QUOTED_BRACE"
247 MATCH_TYPE="OPERATOR"
249 NO_LINE_BREAK="FALSE">
250 <BEGIN>qr(\{)</BEGIN>
253 <SPAN_REGEXP HASH_CHAR="q"
254 DELEGATE="QUOTED_PAREN"
256 MATCH_TYPE="OPERATOR"
258 NO_LINE_BREAK="FALSE">
259 <BEGIN>qr(\()</BEGIN>
263 <!-- tr/// transliteration -->
264 <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="tr"
265 AT_WORD_START="TRUE">tr\s*\{.*?[^\\]\}\s*\{(?:.*?[^\\])*?\}[cds]*</SEQ_REGEXP>
267 <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="tr"
268 AT_WORD_START="TRUE">tr([^\p{Alnum}\p{Space}\}])(?:.*?)\1(?:.*?)\1[cds]*</SEQ_REGEXP>
270 <!-- y/// translation -->
271 <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="y"
272 AT_WORD_START="TRUE">y\s*\{.*?[^\\]\}\s*\{(?:.*?[^\\])*?\}[cds]*</SEQ_REGEXP>
274 <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="y"
275 AT_WORD_START="TRUE">y([^\p{Alnum}\p{Space}\}_])(?:.*?)\1(?:.*?)\1[cds]*</SEQ_REGEXP>
277 <!-- m// regular expression matching -->
278 <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="m"
279 AT_WORD_START="TRUE">m\s*\{.*?[^\\]\}[cgimosx]*</SEQ_REGEXP>
281 <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="m"
282 AT_WORD_START="TRUE">m([^\p{Alnum}\p{Space}\}])(?:.*?[^\\])\1[cgimosx]*</SEQ_REGEXP>
284 <!-- s/// regular expression substitution -->
285 <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="s"
286 AT_WORD_START="TRUE">s\s*\{.*?\}\s*\{.*?\}[egimosx]*</SEQ_REGEXP>
288 <SEQ_REGEXP TYPE="MARKUP" HASH_CHAR="s"
289 AT_WORD_START="TRUE">s([^\p{Alnum}\p{Space}\}])(?:.*?)\1(?:.*?)\1[egimosx]*</SEQ_REGEXP>
291 <!-- complex operators -->
292 <SEQ TYPE="OPERATOR">||</SEQ>
293 <SEQ TYPE="OPERATOR">//</SEQ>
294 <SEQ TYPE="OPERATOR">&&</SEQ>
295 <SEQ TYPE="OPERATOR">!=</SEQ>
296 <SEQ TYPE="OPERATOR"><=></SEQ>
297 <SEQ TYPE="OPERATOR">-></SEQ>
298 <SEQ TYPE="OPERATOR">=></SEQ>
299 <SEQ TYPE="OPERATOR">==</SEQ>
300 <SEQ TYPE="OPERATOR">=~</SEQ>
301 <SEQ TYPE="OPERATOR">!~</SEQ>
302 <SEQ TYPE="OPERATOR">~~</SEQ>
304 <SEQ TYPE="OPERATOR">+=</SEQ>
305 <SEQ TYPE="OPERATOR">-=</SEQ>
306 <SEQ TYPE="OPERATOR">/=</SEQ>
307 <SEQ TYPE="OPERATOR">*=</SEQ>
308 <SEQ TYPE="OPERATOR">.=</SEQ>
309 <SEQ TYPE="OPERATOR">%=</SEQ>
311 <SEQ TYPE="OPERATOR">&=</SEQ>
312 <SEQ TYPE="OPERATOR">|=</SEQ>
313 <SEQ TYPE="OPERATOR">**=</SEQ>
314 <SEQ TYPE="OPERATOR"><<=</SEQ>
315 <SEQ TYPE="OPERATOR">>>=</SEQ>
316 <SEQ TYPE="OPERATOR">&&=</SEQ>
317 <SEQ TYPE="OPERATOR">||=</SEQ>
318 <SEQ TYPE="OPERATOR">^=</SEQ>
319 <SEQ TYPE="OPERATOR">x=</SEQ>
320 <SEQ TYPE="OPERATOR">>=</SEQ>
321 <SEQ TYPE="OPERATOR"><=</SEQ>
322 <SEQ TYPE="OPERATOR">></SEQ>
323 <SEQ TYPE="OPERATOR"><</SEQ>
325 <!-- simple operators -->
326 <SEQ TYPE="OPERATOR">|</SEQ>
327 <SEQ TYPE="OPERATOR">&</SEQ>
328 <SEQ TYPE="OPERATOR">!</SEQ>
329 <SEQ TYPE="OPERATOR">=</SEQ>
330 <SEQ TYPE="OPERATOR">!</SEQ>
331 <SEQ TYPE="OPERATOR">+</SEQ>
332 <SEQ TYPE="OPERATOR">-</SEQ>
333 <SEQ TYPE="OPERATOR">/</SEQ>
334 <SEQ TYPE="OPERATOR">**</SEQ>
335 <SEQ TYPE="OPERATOR">*</SEQ>
336 <SEQ TYPE="OPERATOR">^</SEQ>
337 <SEQ TYPE="OPERATOR">~</SEQ>
338 <SEQ TYPE="OPERATOR">{</SEQ>
339 <SEQ TYPE="OPERATOR">}</SEQ>
340 <SEQ TYPE="OPERATOR">?</SEQ>
341 <SEQ TYPE="OPERATOR">:</SEQ>
345 <KEYWORD1>new</KEYWORD1>
346 <KEYWORD1>if</KEYWORD1>
347 <KEYWORD1>until</KEYWORD1>
348 <KEYWORD1>while</KEYWORD1>
349 <KEYWORD1>elsif</KEYWORD1>
350 <KEYWORD1>else</KEYWORD1>
351 <KEYWORD1>unless</KEYWORD1>
352 <KEYWORD1>for</KEYWORD1>
353 <KEYWORD1>foreach</KEYWORD1>
354 <KEYWORD1>BEGIN</KEYWORD1>
355 <KEYWORD1>END</KEYWORD1>
357 <OPERATOR>cmp</OPERATOR>
358 <OPERATOR>eq</OPERATOR>
359 <OPERATOR>ne</OPERATOR>
360 <OPERATOR>le</OPERATOR>
361 <OPERATOR>ge</OPERATOR>
362 <OPERATOR>not</OPERATOR>
363 <OPERATOR>and</OPERATOR>
364 <OPERATOR>or</OPERATOR>
365 <OPERATOR>xor</OPERATOR>
367 <!-- At least attempt to highlight 'x', although this misses some -->
368 <OPERATOR>x</OPERATOR>
371 The following function list was derived from the perlfunc man
372 page, Perl version 5.00503
374 Certain keywords have been commented out where they appear more
375 than once, and the y///, qx//, etc. functions have been removed,
376 since they would are colorized not as keywords, but with separate
380 <!-- Functions for SCALARs or strings -->
381 <KEYWORD3>chomp</KEYWORD3>
382 <KEYWORD3>chop</KEYWORD3>
383 <KEYWORD3>chr</KEYWORD3>
384 <KEYWORD3>crypt</KEYWORD3>
385 <KEYWORD3>hex</KEYWORD3>
386 <KEYWORD3>index</KEYWORD3>
387 <KEYWORD3>lc</KEYWORD3>
388 <KEYWORD3>lcfirst</KEYWORD3>
389 <KEYWORD3>length</KEYWORD3>
390 <KEYWORD3>oct</KEYWORD3>
391 <KEYWORD3>ord</KEYWORD3>
392 <KEYWORD3>pack</KEYWORD3>
393 <KEYWORD3>reverse</KEYWORD3>
394 <KEYWORD3>rindex</KEYWORD3>
395 <KEYWORD3>sprintf</KEYWORD3>
396 <KEYWORD3>substr</KEYWORD3>
397 <KEYWORD3>uc</KEYWORD3>
398 <KEYWORD3>ucfirst</KEYWORD3>
400 <!-- Regular expressions and pattern matching -->
401 <KEYWORD3>pos</KEYWORD3>
402 <KEYWORD3>quotemeta</KEYWORD3>
403 <KEYWORD3>split</KEYWORD3>
404 <KEYWORD3>study</KEYWORD3>
406 <!-- Numeric functions -->
407 <KEYWORD3>abs</KEYWORD3>
408 <KEYWORD3>atan2</KEYWORD3>
409 <KEYWORD3>cos</KEYWORD3>
410 <KEYWORD3>exp</KEYWORD3>
411 <!--<KEYWORD3>hex</KEYWORD3>-->
412 <KEYWORD3>int</KEYWORD3>
413 <KEYWORD3>log</KEYWORD3>
414 <!--<KEYWORD3>oct</KEYWORD3>-->
415 <KEYWORD3>rand</KEYWORD3>
416 <KEYWORD3>sin</KEYWORD3>
417 <KEYWORD3>sqrt</KEYWORD3>
418 <KEYWORD3>srand</KEYWORD3>
420 <!-- Functions for real @ARRAYs -->
421 <KEYWORD3>pop</KEYWORD3>
422 <KEYWORD3>push</KEYWORD3>
423 <KEYWORD3>shift</KEYWORD3>
424 <KEYWORD3>splice</KEYWORD3>
425 <KEYWORD3>unshift</KEYWORD3>
427 <!-- Functions for list data -->
428 <KEYWORD3>grep</KEYWORD3>
429 <KEYWORD3>join</KEYWORD3>
430 <KEYWORD3>map</KEYWORD3>
431 <!--<KEYWORD3>reverse</KEYWORD3>-->
432 <KEYWORD3>sort</KEYWORD3>
433 <KEYWORD3>unpack</KEYWORD3>
435 <!-- Functions for real %HASHes -->
436 <KEYWORD3>delete</KEYWORD3>
437 <KEYWORD3>each</KEYWORD3>
438 <KEYWORD3>exists</KEYWORD3>
439 <KEYWORD3>keys</KEYWORD3>
440 <KEYWORD3>values</KEYWORD3>
442 <!-- Input and output functions -->
443 <KEYWORD3>binmode</KEYWORD3>
444 <KEYWORD3>close</KEYWORD3>
445 <KEYWORD3>closedir</KEYWORD3>
446 <KEYWORD3>dbmclose</KEYWORD3>
447 <KEYWORD3>dbmopen</KEYWORD3>
448 <!--<KEYWORD3>die</KEYWORD3>-->
449 <KEYWORD3>eof</KEYWORD3>
450 <KEYWORD3>fileno</KEYWORD3>
451 <KEYWORD3>flock</KEYWORD3>
452 <KEYWORD3>format</KEYWORD3>
453 <KEYWORD3>getc</KEYWORD3>
454 <KEYWORD3>print</KEYWORD3>
455 <KEYWORD3>printf</KEYWORD3>
456 <KEYWORD3>read</KEYWORD3>
457 <KEYWORD3>readdir</KEYWORD3>
458 <KEYWORD3>rewinddir</KEYWORD3>
459 <KEYWORD3>say</KEYWORD3>
460 <KEYWORD3>seek</KEYWORD3>
461 <KEYWORD3>seekdir</KEYWORD3>
462 <KEYWORD3>select</KEYWORD3>
463 <KEYWORD3>syscall</KEYWORD3>
464 <KEYWORD3>sysread</KEYWORD3>
465 <KEYWORD3>sysseek</KEYWORD3>
466 <KEYWORD3>syswrite</KEYWORD3>
467 <KEYWORD3>tell</KEYWORD3>
468 <KEYWORD3>telldir</KEYWORD3>
469 <KEYWORD3>truncate</KEYWORD3>
470 <KEYWORD3>warn</KEYWORD3>
471 <KEYWORD3>write</KEYWORD3>
473 <!-- Functions for fixed length data or records -->
474 <!--<KEYWORD3>pack</KEYWORD3>-->
475 <!--<KEYWORD3>read</KEYWORD3>-->
476 <!--<KEYWORD3>syscall</KEYWORD3>-->
477 <!--<KEYWORD3>sysread</KEYWORD3>-->
478 <!--<KEYWORD3>syswrite</KEYWORD3>-->
479 <!--<KEYWORD3>unpack</KEYWORD3>-->
480 <KEYWORD3>vec</KEYWORD3>
482 <!-- Functions for filehandles, files, or directories -->
483 <KEYWORD3>chdir</KEYWORD3>
484 <KEYWORD3>chmod</KEYWORD3>
485 <KEYWORD3>chown</KEYWORD3>
486 <KEYWORD3>chroot</KEYWORD3>
487 <KEYWORD3>fcntl</KEYWORD3>
488 <KEYWORD3>glob</KEYWORD3>
489 <KEYWORD3>ioctl</KEYWORD3>
490 <KEYWORD3>link</KEYWORD3>
491 <KEYWORD3>lstat</KEYWORD3>
492 <KEYWORD3>mkdir</KEYWORD3>
493 <KEYWORD3>open</KEYWORD3>
494 <KEYWORD3>opendir</KEYWORD3>
495 <KEYWORD3>readlink</KEYWORD3>
496 <KEYWORD3>rename</KEYWORD3>
497 <KEYWORD3>rmdir</KEYWORD3>
498 <KEYWORD3>stat</KEYWORD3>
499 <KEYWORD3>symlink</KEYWORD3>
500 <KEYWORD3>umask</KEYWORD3>
501 <KEYWORD3>unlink</KEYWORD3>
502 <KEYWORD3>utime</KEYWORD3>
504 <!-- Keywords related to the control flow of your perl program -->
505 <KEYWORD1>caller</KEYWORD1>
506 <KEYWORD1>case</KEYWORD1>
507 <KEYWORD1>continue</KEYWORD1>
508 <KEYWORD1>croak</KEYWORD1>
509 <KEYWORD1>die</KEYWORD1>
510 <KEYWORD1>do</KEYWORD1>
511 <KEYWORD1>dump</KEYWORD1>
512 <KEYWORD1>eval</KEYWORD1>
513 <KEYWORD1>exit</KEYWORD1>
514 <KEYWORD1>goto</KEYWORD1>
515 <KEYWORD1>last</KEYWORD1>
516 <KEYWORD1>next</KEYWORD1>
517 <KEYWORD1>redo</KEYWORD1>
518 <KEYWORD1>return</KEYWORD1>
519 <KEYWORD1>switch</KEYWORD1>
520 <KEYWORD1>wantarray</KEYWORD1>
522 <!-- Keywords related to switch -->
523 <KEYWORD1>break</KEYWORD1>
524 <KEYWORD1>default</KEYWORD1>
525 <KEYWORD1>given</KEYWORD1>
526 <KEYWORD1>when</KEYWORD1>
528 <!-- Keywords related to scoping -->
529 <!--<KEYWORD1>caller</KEYWORD1>-->
530 <!--<KEYWORD1>import</KEYWORD1>-->
531 <KEYWORD1>local</KEYWORD1>
532 <KEYWORD1>my</KEYWORD1>
533 <KEYWORD1>our</KEYWORD1>
534 <KEYWORD1>package</KEYWORD1>
535 <KEYWORD1>state</KEYWORD1>
536 <KEYWORD1>use</KEYWORD1>
538 <!-- Miscellaneous functions -->
539 <KEYWORD3>defined</KEYWORD3>
540 <!--<KEYWORD3>dump</KEYWORD3>-->
541 <!--<KEYWORD3>eval</KEYWORD3>-->
542 <KEYWORD3>formline</KEYWORD3>
543 <!--<KEYWORD3>local</KEYWORD3>-->
544 <!--<KEYWORD3>my</KEYWORD3>-->
545 <KEYWORD3>reset</KEYWORD3>
546 <KEYWORD3>scalar</KEYWORD3>
547 <KEYWORD3>undef</KEYWORD3>
548 <!--<KEYWORD3>wantarray</KEYWORD3>-->
550 <!-- Functions for processes and process groups -->
551 <KEYWORD3>alarm</KEYWORD3>
552 <KEYWORD3>exec</KEYWORD3>
553 <KEYWORD3>fork</KEYWORD3>
554 <KEYWORD3>getpgrp</KEYWORD3>
555 <KEYWORD3>getppid</KEYWORD3>
556 <KEYWORD3>getpriority</KEYWORD3>
557 <KEYWORD3>kill</KEYWORD3>
558 <KEYWORD3>pipe</KEYWORD3>
559 <KEYWORD3>setpgrp</KEYWORD3>
560 <KEYWORD3>setpriority</KEYWORD3>
561 <KEYWORD3>sleep</KEYWORD3>
562 <KEYWORD3>system</KEYWORD3>
563 <KEYWORD3>times</KEYWORD3>
564 <KEYWORD3>wait</KEYWORD3>
565 <KEYWORD3>waitpid</KEYWORD3>
567 <!-- Keywords related to perl modules -->
568 <!--<KEYWORD1>do</KEYWORD1>-->
569 <KEYWORD1>import</KEYWORD1>
570 <KEYWORD1>no</KEYWORD1>
571 <!--<KEYWORD1>package</KEYWORD1>-->
572 <KEYWORD1>require</KEYWORD1>
573 <!--<KEYWORD1>use</KEYWORD1>-->
575 <!-- Keywords related to classes and object-orientedness -->
576 <KEYWORD3>bless</KEYWORD3>
577 <!--<KEYWORD3>dbmclose</KEYWORD3>-->
578 <!--<KEYWORD3>dbmopen</KEYWORD3>-->
579 <!--<KEYWORD3>package</KEYWORD3>-->
580 <KEYWORD3>ref</KEYWORD3>
581 <KEYWORD3>tie</KEYWORD3>
582 <KEYWORD3>tied</KEYWORD3>
583 <KEYWORD3>untie</KEYWORD3>
584 <!--<KEYWORD3>use</KEYWORD3>-->
586 <!-- Low-level socket functions -->
587 <KEYWORD3>accept</KEYWORD3>
588 <KEYWORD3>bind</KEYWORD3>
589 <KEYWORD3>connect</KEYWORD3>
590 <KEYWORD3>getpeername</KEYWORD3>
591 <KEYWORD3>getsockname</KEYWORD3>
592 <KEYWORD3>getsockopt</KEYWORD3>
593 <KEYWORD3>listen</KEYWORD3>
594 <KEYWORD3>recv</KEYWORD3>
595 <KEYWORD3>send</KEYWORD3>
596 <KEYWORD3>setsockopt</KEYWORD3>
597 <KEYWORD3>shutdown</KEYWORD3>
598 <KEYWORD3>socket</KEYWORD3>
599 <KEYWORD3>socketpair</KEYWORD3>
601 <!-- System V interprocess communication functions -->
602 <KEYWORD3>msgctl</KEYWORD3>
603 <KEYWORD3>msgget</KEYWORD3>
604 <KEYWORD3>msgrcv</KEYWORD3>
605 <KEYWORD3>msgsnd</KEYWORD3>
606 <KEYWORD3>semctl</KEYWORD3>
607 <KEYWORD3>semget</KEYWORD3>
609 <KEYWORD3>semop</KEYWORD3>
610 <KEYWORD3>shmctl</KEYWORD3>
611 <KEYWORD3>shmget</KEYWORD3>
612 <KEYWORD3>shmread</KEYWORD3>
613 <KEYWORD3>shmwrite</KEYWORD3>
615 <!-- Fetching user and group info -->
616 <KEYWORD3>endgrent</KEYWORD3>
617 <KEYWORD3>endhostent</KEYWORD3>
618 <KEYWORD3>endnetent</KEYWORD3>
619 <KEYWORD3>endpwent</KEYWORD3>
620 <KEYWORD3>getgrent</KEYWORD3>
621 <KEYWORD3>getgrgid</KEYWORD3>
622 <KEYWORD3>getgrnam</KEYWORD3>
623 <KEYWORD3>getlogin</KEYWORD3>
624 <KEYWORD3>getpwent</KEYWORD3>
625 <KEYWORD3>getpwnam</KEYWORD3>
626 <KEYWORD3>getpwuid</KEYWORD3>
627 <KEYWORD3>setgrent</KEYWORD3>
628 <KEYWORD3>setpwent</KEYWORD3>
630 <!-- Fetching network info -->
631 <KEYWORD3>endprotoent</KEYWORD3>
632 <KEYWORD3>endservent</KEYWORD3>
633 <KEYWORD3>gethostbyaddr</KEYWORD3>
634 <KEYWORD3>gethostbyname</KEYWORD3>
635 <KEYWORD3>gethostent</KEYWORD3>
636 <KEYWORD3>getnetbyaddr</KEYWORD3>
637 <KEYWORD3>getnetbyname</KEYWORD3>
638 <KEYWORD3>getnetent</KEYWORD3>
639 <KEYWORD3>getprotobyname</KEYWORD3>
640 <KEYWORD3>getprotobynumber</KEYWORD3>
641 <KEYWORD3>getprotoent</KEYWORD3>
642 <KEYWORD3>getservbyname</KEYWORD3>
643 <KEYWORD3>getservbyport</KEYWORD3>
644 <KEYWORD3>getservent</KEYWORD3>
645 <KEYWORD3>sethostent</KEYWORD3>
646 <KEYWORD3>setnetent</KEYWORD3>
647 <KEYWORD3>setprotoent</KEYWORD3>
648 <KEYWORD3>setservent</KEYWORD3>
650 <!-- Time-related functions -->
651 <KEYWORD3>gmtime</KEYWORD3>
652 <KEYWORD3>localtime</KEYWORD3>
653 <KEYWORD3>time</KEYWORD3>
654 <!--<KEYWORD3>times</KEYWORD3>-->
656 <FUNCTION>sub</FUNCTION>
660 <RULES SET="POD" DEFAULT="COMMENT2">
661 <MARK_FOLLOWING TYPE="LABEL" AT_LINE_START="TRUE">=</MARK_FOLLOWING>
664 <RULES SET="LITERAL" DEFAULT="LITERAL1" ESCAPE="\">
665 <!-- Variables inside a Literal -->
666 <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">
671 <!-- object method inside a Literal -->
672 <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">
677 <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD2">\$#?((\p{Alpha}\w*|_\w+)?::)*(\p{Alpha}\w*|_\w+|\d+)</SEQ_REGEXP>
679 <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">
684 <MARK_FOLLOWING TYPE="KEYWORD2">@</MARK_FOLLOWING>
686 <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">
691 <MARK_FOLLOWING TYPE="KEYWORD2">%</MARK_FOLLOWING>
693 <SEQ TYPE="LITERAL1">|</SEQ>
694 <SEQ TYPE="LITERAL1">&</SEQ>
695 <SEQ TYPE="LITERAL1">!</SEQ>
696 <SEQ TYPE="LITERAL1">></SEQ>
697 <SEQ TYPE="LITERAL1"><</SEQ>
698 <SEQ TYPE="LITERAL1">)</SEQ>
699 <SEQ TYPE="LITERAL1">(</SEQ>
700 <SEQ TYPE="LITERAL1">=</SEQ>
701 <SEQ TYPE="LITERAL1">!</SEQ>
702 <SEQ TYPE="LITERAL1">+</SEQ>
703 <SEQ TYPE="LITERAL1">-</SEQ>
704 <SEQ TYPE="LITERAL1">/</SEQ>
705 <SEQ TYPE="LITERAL1">*</SEQ>
706 <SEQ TYPE="LITERAL1">^</SEQ>
707 <SEQ TYPE="LITERAL1">~</SEQ>
708 <SEQ TYPE="LITERAL1">}</SEQ>
709 <SEQ TYPE="LITERAL1">{</SEQ>
710 <SEQ TYPE="LITERAL1">.</SEQ>
711 <SEQ TYPE="LITERAL1">,</SEQ>
712 <SEQ TYPE="LITERAL1">;</SEQ>
713 <SEQ TYPE="LITERAL1">]</SEQ>
714 <SEQ TYPE="LITERAL1">[</SEQ>
715 <SEQ TYPE="LITERAL1">?</SEQ>
716 <SEQ TYPE="LITERAL1">:</SEQ>
719 <!-- Literals framed by apostrophs -->
720 <RULES SET="APOSTR" DEFAULT="LITERAL1" ESCAPE="\">
722 <!-- just a hack for sprintf -->
723 <SEQ_REGEXP HASH_CHAR="%" TYPE="LITERAL4">%\d*\.?\d*[dfis]</SEQ_REGEXP>
727 <RULES SET="EXEC" DEFAULT="KEYWORD3" ESCAPE="\">
729 <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>
732 <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">
737 <MARK_FOLLOWING TYPE="KEYWORD2">$#</MARK_FOLLOWING>
738 <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>
740 <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">
745 <MARK_FOLLOWING TYPE="KEYWORD2">@</MARK_FOLLOWING>
747 <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">
752 <MARK_FOLLOWING TYPE="KEYWORD2">%</MARK_FOLLOWING>
755 <RULES SET="VARIABLE" DEFAULT="KEYWORD2" ESCAPE="\">
756 <SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="VARIABLE">
761 <SEQ TYPE="OPERATOR">-></SEQ>
764 <!-- Used for quote-like operators; just makes sure the brackets are balanced. -->
765 <RULES SET="QUOTED_BRACKET" DEFAULT="LITERAL1" ESCAPE="\">
766 <SPAN NO_LINE_BREAK="FALSE"
768 MATCH_TYPE="OPERATOR"
769 DELEGATE="QUOTED_BRACKET"
775 <RULES SET="QUOTED_BRACE" DEFAULT="LITERAL1" ESCAPE="\">
776 <SPAN NO_LINE_BREAK="FALSE"
778 MATCH_TYPE="OPERATOR"
779 DELEGATE="QUOTED_BRACE"
785 <RULES SET="QUOTED_PAREN" DEFAULT="LITERAL1" ESCAPE="\">
786 <SPAN NO_LINE_BREAK="FALSE"
788 MATCH_TYPE="OPERATOR"
789 DELEGATE="QUOTED_PAREN"