1 | Prism.languages.perl = {
|
2 | 'comment': [
|
3 | {
|
4 |
|
5 | pattern: /(^\s*)=\w+[\s\S]*?=cut.*/m,
|
6 | lookbehind: true
|
7 | },
|
8 | {
|
9 | pattern: /(^|[^\\$])#.*/,
|
10 | lookbehind: true
|
11 | }
|
12 | ],
|
13 |
|
14 | 'string': [
|
15 |
|
16 | {
|
17 | pattern: /\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,
|
18 | greedy: true
|
19 | },
|
20 |
|
21 |
|
22 | {
|
23 | pattern: /\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1/,
|
24 | greedy: true
|
25 | },
|
26 |
|
27 |
|
28 | {
|
29 | pattern: /\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,
|
30 | greedy: true
|
31 | },
|
32 |
|
33 |
|
34 | {
|
35 | pattern: /\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,
|
36 | greedy: true
|
37 | },
|
38 |
|
39 |
|
40 | {
|
41 | pattern: /\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,
|
42 | greedy: true
|
43 | },
|
44 |
|
45 |
|
46 | {
|
47 | pattern: /\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,
|
48 | greedy: true
|
49 | },
|
50 |
|
51 |
|
52 | {
|
53 | pattern: /("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,
|
54 | greedy: true
|
55 | },
|
56 |
|
57 |
|
58 |
|
59 | {
|
60 | pattern: /'(?:[^'\\\r\n]|\\.)*'/,
|
61 | greedy: true
|
62 | }
|
63 | ],
|
64 | 'regex': [
|
65 |
|
66 | {
|
67 | pattern: /\b(?:m|qr)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,
|
68 | greedy: true
|
69 | },
|
70 |
|
71 |
|
72 | {
|
73 | pattern: /\b(?:m|qr)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,
|
74 | greedy: true
|
75 | },
|
76 |
|
77 |
|
78 | {
|
79 | pattern: /\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,
|
80 | greedy: true
|
81 | },
|
82 |
|
83 |
|
84 | {
|
85 | pattern: /\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,
|
86 | greedy: true
|
87 | },
|
88 |
|
89 |
|
90 | {
|
91 | pattern: /\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,
|
92 | greedy: true
|
93 | },
|
94 |
|
95 |
|
96 | {
|
97 | pattern: /\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,
|
98 | greedy: true
|
99 | },
|
100 |
|
101 |
|
102 |
|
103 |
|
104 | {
|
105 | pattern: /(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,
|
106 | lookbehind: true,
|
107 | greedy: true
|
108 | },
|
109 |
|
110 |
|
111 | {
|
112 | pattern: /(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,
|
113 | lookbehind: true,
|
114 | greedy: true
|
115 | },
|
116 |
|
117 |
|
118 | {
|
119 | pattern: /(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,
|
120 | lookbehind: true,
|
121 | greedy: true
|
122 | },
|
123 |
|
124 |
|
125 | {
|
126 | pattern: /(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,
|
127 | lookbehind: true,
|
128 | greedy: true
|
129 | },
|
130 |
|
131 |
|
132 | {
|
133 | pattern: /(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,
|
134 | lookbehind: true,
|
135 | greedy: true
|
136 | },
|
137 |
|
138 |
|
139 | {
|
140 | pattern: /(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,
|
141 | lookbehind: true,
|
142 | greedy: true
|
143 | },
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 | {
|
150 | pattern: /\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/,
|
151 | greedy: true
|
152 | }
|
153 | ],
|
154 |
|
155 |
|
156 | 'variable': [
|
157 |
|
158 | /[&*$@%]\{\^[A-Z]+\}/,
|
159 |
|
160 | /[&*$@%]\^[A-Z_]/,
|
161 |
|
162 | /[&*$@%]#?(?=\{)/,
|
163 |
|
164 | /[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+)+(?:::)*/i,
|
165 |
|
166 | /[&*$@%]\d+/,
|
167 |
|
168 |
|
169 | /(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/
|
170 | ],
|
171 | 'filehandle': {
|
172 |
|
173 | pattern: /<(?![<=])\S*>|\b_\b/,
|
174 | alias: 'symbol'
|
175 | },
|
176 | 'vstring': {
|
177 |
|
178 | pattern: /v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,
|
179 | alias: 'string'
|
180 | },
|
181 | 'function': {
|
182 | pattern: /sub [a-z0-9_]+/i,
|
183 | inside: {
|
184 | keyword: /sub/
|
185 | }
|
186 | },
|
187 | 'keyword': /\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\b/,
|
188 | 'number': /\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,
|
189 | 'operator': /-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,
|
190 | 'punctuation': /[{}[\];(),:]/
|
191 | };
|