\:m: ^#!/\w.*\=2b |package [\w:]+\=40 |STD(IN|OUT|ERR)\=43 |\b\w+::[A-Z0-9_]+(\(\=1|\b\=46) \; all-caps function or constant from another module |\b\w+(::\w+)+\=1 |^(#+\n)#.*?\n#+\n\=1e |#! .+\n\=33 |#\?.+\n\=3a |##.+\n\=3f |'[\w\s]+'\s*=>\<\<\=47 |-\w+\s+=>\<\<\=67 |\b\w+\s+=>\<\<\=67 |\$["!\-+]\=4 \; - magic variable(s) |\s[A-Z]+:\s\=41 \; label |use [\w:]+\=8 |0x[0-9A-F]+\=8 |-?[0-9]+(\.[0-9]+)*\=8 \; - on numbers: no red |#.*\=6e \; line comment |~=\=a0 |^\s*=\w+[.\n]+\=4 \; documentation? |(?1["'``])(\\?.)*?(\1|$)\=9 \; quoted string |<<\s*(?1["'])(?2.+?)\1[.\n]+?(\2|\Z)\=29 |<<\s*(?1[A-Z]+)[.\n]+?(\1|\Z)\=29 \; heredoc \; functions |\bsub\s+\w+\b\=19 |&\w+\=1 |\b(q|qq|qx|qw|m|qr)\b\s*(`(.*?`)|`<.*?`>|`[.*?`]|`{.*?`}|(?1\S).*?\1)\w*\=4b |\b(s|tr)\b\s*(`(.*?`)\s*`(.*?`)|`<.*?`>\s*`<.*?`>|`[.*?`]\s*`[.*?`]|`{.*?`}\s*`{.*?`}|(?1\S).*?\1.*?\1)\w*\=9 |\b\w+\(\<\=1 \; keywords |\b(if|e(ls(if|e)|val)|unless|while|until|for|foreach|given|when|d(efault|o)|next|continue|last|my|return|local)\b\=41 |new [a-zA-Z_:]+\=41 \; operators |\b(and|xor|or|not|eq|ne|gt|lt|le|ge|cmp|x)\b\=3 \; built in functions |\b(a(bs|ccept|larm|tan2)|b(ind|inmode|less)|c(aller|hdir|hmod|homp|hop|hown|hr|hroot|lose|losedir|onnect|ontinue|os|rypt)|d(bmclose|bmopen|efined|elete|ie|o|ump)|e(ach|ndgrent|ndhostent|ndnetent|ndprotoent|ndpwent|ndservent|of|xec|xists|xit|xp)|f(cntl|ileno|lock|ork|ormat|ormline)|g(et(c|grent|grgid|grnam|hostbyaddr|hostbyname|hostent|login|netbyaddr|netbyname|netent|peername|pgrp|ppid|priority|protobyname|protobynumber|protoent|pwent|pwnam|pwuid|servbyname|servbyport|servent|sockname|sockopt)|lob|mtime|oto|rep)|hex|i(mport|ndex|nt|octl)|join|k(eys|ill)|l(ast|c|cfirst|ength|ink|isten|ocaltime|ock|og|stat)|m(ap|kdir|sgctl|sgget|sgrcv|sgsnd)|n(ext|o)|o(ct|pen|pendir|rd|ur)|p(ack|ackage|ipe|op|os|rint|rintf|rototype|ush)|q(q|r|uotemeta|w|x)|r(and|ead|eaddir|eadline|eadlink|eadpipe|ecv|edo|ef|ename|equire|eset|everse|ewinddir|index|mdir)|s(ay|calar|eek|eekdir|elect|emctl|emget|emop|end|etgrent|ethostent|etnetent|etpgrp|etpriority|etprotoent|etpwent|etservent|etsockopt|hift|hmctl|hmget|hmread|hmwrite|hutdown|in|leep|ocket|ocketpair|ort|plice|plit|printf|qrt|rand|tat|tudy|ub|ubstr|ymlink|yscall|ysopen|ysread|ysseek|ystem|yswrite)|t(ell|elldir|ie|ied|ime|imes|r|runcate)|u(c|cfirst|mask|ndef|nlink|npack|nshift|ntie|se|time)|v(alues|ec)|w(ait|aitpid|antarray|arn|rite)|y)\b\=1 |\b[A-Z0-9_]+\b\=46 |(`$#|[@*%\$])\w+(::\w+)?\=2 \; variables |[!`.+`-/*=;&|~`^><@`\?:`$%]\=3 \; symbols |(^\{|\}$|\s\{$)\=40