3 " Maintainer: vim-perl <vim-perl@googlegroups.com>
4 " Homepage: https://github.com/vim-perl/vim-perl/tree/master
5 " Bugs/requests: https://github.com/vim-perl/vim-perl/issues
6 " Last Change: 2020 Apr 15
7 " Contributors: Andy Lester <andy@petdance.com>
8 " Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
9 " Lukas Mai <l.mai.web.de>
10 " Nick Hibma <nick@van-laarhoven.org>
11 " Sonia Heimann <niania@netsurf.org>
12 " Rob Hoelz <rob@hoelz.ro>
15 " Please download the most recent version first, before mailing
18 " The following parameters are available for tuning the
19 " perl syntax highlighting, with defaults given:
21 " let perl_include_pod = 1
22 " unlet perl_no_scope_in_variables
23 " unlet perl_no_extended_vars
24 " unlet perl_string_as_statement
25 " unlet perl_no_sync_on_sub
26 " unlet perl_no_sync_on_global_var
27 " let perl_sync_dist = 100
29 " unlet perl_fold_blocks
30 " unlet perl_nofold_packages
31 " unlet perl_nofold_subs
32 " unlet perl_fold_anonymous_subs
33 " unlet perl_no_subprototype_error
35 if exists("b:current_syntax")
42 " POD starts with ^=<word> and ends with ^=cut
44 if !exists("perl_include_pod") || perl_include_pod == 1
45 " Include a while extra syntax file
46 syn include @Pod syntax/pod.vim
47 unlet b:current_syntax
48 if exists("perl_fold")
49 syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold extend
50 syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold extend
52 syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend
53 syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
56 " Use only the bare minimum of rules
57 if exists("perl_fold")
58 syn region perlPOD start="^=[a-z]" end="^=cut" fold
60 syn region perlPOD start="^=[a-z]" end="^=cut"
65 syn cluster perlTop contains=TOP
67 syn region perlBraces start="{" end="}" transparent extend
71 syn match perlConditional "\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
72 syn match perlConditional "\<else\%(\%(\_s\*if\>\)\|\>\)" contains=perlElseIfError skipwhite skipnl skipempty
73 syn match perlRepeat "\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
74 syn match perlOperator "\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
75 " for some reason, adding this as the nextgroup for perlControl fixes BEGIN
77 syn match perlFakeGroup "" contained
78 syn match perlControl "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup
80 syn match perlStatementStorage "\<\%(my\|our\|local\|state\)\>"
81 syn match perlStatementControl "\<\%(return\|last\|next\|redo\|goto\|break\)\>"
82 syn match perlStatementScalar "\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|fc\|uc\%(first\)\=\)\>"
83 syn match perlStatementRegexp "\<\%(pos\|quotemeta\|split\|study\)\>"
84 syn match perlStatementNumeric "\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>"
85 syn match perlStatementList "\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>"
86 syn match perlStatementHash "\<\%(delete\|each\|exists\|keys\|values\)\>"
87 syn match perlStatementIOfunc "\<\%(syscall\|dbmopen\|dbmclose\)\>"
88 syn match perlStatementFiledesc "\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite
89 syn match perlStatementFiledesc "\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite
90 syn match perlStatementVector "\<vec\>"
91 syn match perlStatementFiles "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>"
92 syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
93 syn match perlStatementFlow "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\|evalbytes\)\>"
94 syn match perlStatementInclude "\<\%(require\|import\|unimport\)\>"
95 syn match perlStatementInclude "\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autodie\|autouse\|parent\|base\|big\%(int\|num\|rat\)\|blib\|bytes\|charnames\|constant\|diagnostics\|encoding\%(::warnings\)\=\|feature\|fields\|filetest\|if\|integer\|less\|lib\|locale\|mro\|open\|ops\|overload\|overloading\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\="
96 syn match perlStatementProc "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>"
97 syn match perlStatementSocket "\<\%(accept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"
98 syn match perlStatementIPC "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>"
99 syn match perlStatementNetwork "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>"
100 syn match perlStatementPword "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>"
101 syn match perlStatementTime "\<\%(gmtime\|localtime\|time\)\>"
103 syn match perlStatementMisc "\<\%(warn\|format\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
105 syn keyword perlTodo TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained
107 syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\%(\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*\)\@<={" end="}" transparent extend
109 syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
113 " Should be cleaned up to better handle identifiers in particular situations
114 " (in hash keys for example)
116 " Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc.
117 " We do not process complex things such as @{${"foo"}}. Too complicated, and
118 " too slow. And what is after the -> is *not* considered as part of the
119 " variable - there again, too complicated and too slow.
121 " Special variables first ($^A, ...) and ($|, $', ...)
122 syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\="
123 syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"
124 syn match perlVarPlain "@[-+]"
125 syn match perlVarPlain "$\%(0\|[1-9]\d*\)"
126 " Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
127 syn match perlVarPlain "$::\@!"
128 " These variables are not recognized within matches.
129 syn match perlVarNotInMatches "$[|)]"
130 " This variable is not recognized within matches delimited by m//.
131 syn match perlVarSlash "$/"
133 " And plain identifiers
134 syn match perlPackageRef "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained
136 " To not highlight packages in variables as a scope reference - i.e. in
137 " $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables"
138 " If you don't want complex things like @{${"foo"}} to be processed,
139 " just set the variable "perl_no_extended_vars"...
141 if !exists("perl_no_scope_in_variables")
142 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref
143 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref
144 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref
146 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref
147 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref
148 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref
151 syn match perlVarPlain2 "%[-+]"
153 if !exists("perl_no_extended_vars")
154 syn cluster perlExpr contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlArrow,perlBraces
155 syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained
156 syn region perlArrow matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained
157 syn region perlArrow matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained
158 syn match perlArrow "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained
159 syn region perlArrow matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained
160 syn region perlVarBlock matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend
161 syn region perlVarBlock2 matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend
162 syn match perlVarPlain2 "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend
163 syn match perlVarPlain "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend
164 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend
165 syn match perlVarSimpleMember "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contains=perlVarSimpleMemberName contained extend
166 syn match perlVarSimpleMemberName "\I\i*" contained
167 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend
168 syn match perlPackageConst "__PACKAGE__" nextgroup=perlMethod,perlPostDeref
169 syn match perlMethod "->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref
170 syn match perlPostDeref "->\%($#\|[$@%&*]\)\*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref
171 syn region perlPostDeref start="->\%($#\|[$@%&*]\)\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref
172 syn region perlPostDeref matchgroup=perlPostDeref start="->\%($#\|[$@%&*]\){" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref
176 syn match perlFiledescRead "<\h\w*>"
178 syn match perlFiledescStatementComma "(\=\s*\<\u\w*\>\s*,"me=e-1 transparent contained contains=perlFiledescStatement
179 syn match perlFiledescStatementNocomma "(\=\s*\<\u\w*\>\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement
181 syn match perlFiledescStatement "\<\u\w*\>" contained
183 " Special characters in strings and matches
184 syn match perlSpecialString "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend
185 syn match perlSpecialStringU2 "\\." extend contained contains=NONE
186 syn match perlSpecialStringU "\\\\" contained
187 syn match perlSpecialMatch "\\[1-9]" contained extend
188 syn match perlSpecialMatch "\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
189 syn match perlSpecialMatch "\\k\%(<\h\w*>\|'\h\w*'\)" contained
190 syn match perlSpecialMatch "{\d\+\%(,\%(\d\+\)\=\)\=}" contained
191 syn match perlSpecialMatch "\[[]-]\=[^\[\]]*[]-]\=\]" contained extend
192 syn match perlSpecialMatch "[+*()?.]" contained
193 syn match perlSpecialMatch "(?[#:=!]" contained
194 syn match perlSpecialMatch "(?[impsx]*\%(-[imsx]\+\)\=)" contained
195 syn match perlSpecialMatch "(?\%([-+]\=\d\+\|R\))" contained
196 syn match perlSpecialMatch "(?\%(&\|P[>=]\)\h\w*)" contained
197 syn match perlSpecialMatch "(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained
201 " Highlight lines with only whitespace (only in blank delimited here documents) as errors
202 syn match perlNotEmptyLine "^\s\+$" contained
203 " Highlight "} else if (...) {", it should be "} else { if (...) { " or "} elsif (...) {"
204 syn match perlElseIfError "else\_s*if" containedin=perlConditional
205 syn keyword perlElseIfError elseif containedin=perlConditional
207 " Variable interpolation
209 " These items are interpolated inside "" strings and similar constructs.
210 syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock
211 " These items are interpolated inside '' strings and similar constructs.
212 syn cluster perlInterpSQ contains=perlSpecialStringU,perlSpecialStringU2
213 " These items are interpolated inside m// matches and s/// substitutions.
214 syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock
215 " These items are interpolated inside m## matches and s### substitutions.
216 syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash
219 syn region perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend
224 syn match perlNumber "\<\%(0\%(x\x[[:xdigit:]_]*\|b[01][01_]*\|\o[0-7_]*\|\)\|[1-9][[:digit:]_]*\)\>"
225 syn match perlFloat "\<\d[[:digit:]_]*[eE][\-+]\=\d\+"
226 syn match perlFloat "\<\d[[:digit:]_]*\.[[:digit:]_]*\%([eE][\-+]\=\d\+\)\="
227 syn match perlFloat "\.[[:digit:]][[:digit:]_]*\%([eE][\-+]\=\d\+\)\="
229 syn match perlString "\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV
230 syn match perlVStringV "\<v" contained
233 syn region perlParensSQ start=+(+ end=+)+ extend contained contains=perlParensSQ,@perlInterpSQ keepend
234 syn region perlBracketsSQ start=+\[+ end=+\]+ extend contained contains=perlBracketsSQ,@perlInterpSQ keepend
235 syn region perlBracesSQ start=+{+ end=+}+ extend contained contains=perlBracesSQ,@perlInterpSQ keepend
236 syn region perlAnglesSQ start=+<+ end=+>+ extend contained contains=perlAnglesSQ,@perlInterpSQ keepend
238 syn region perlParensDQ start=+(+ end=+)+ extend contained contains=perlParensDQ,@perlInterpDQ keepend
239 syn region perlBracketsDQ start=+\[+ end=+\]+ extend contained contains=perlBracketsDQ,@perlInterpDQ keepend
240 syn region perlBracesDQ start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend
241 syn region perlAnglesDQ start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend
244 " Simple version of searches and matches
245 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[msixpodualgcn]*+ contains=@perlInterpMatch keepend extend
246 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[msixpodualgcn]*+ contains=@perlInterpMatch keepend extend
247 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgcn]*+ contains=@perlInterpSQ keepend extend
248 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgcn]*+ contains=@perlInterpSlash keepend extend
249 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgcn]*+ contains=@perlInterpMatch,perlParensDQ keepend extend
250 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgcn]*+ contains=@perlInterpMatch,perlBracesDQ extend
251 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgcn]*+ contains=@perlInterpMatch,perlAnglesDQ keepend extend
252 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgcn]*+ contains=@perlInterpMatch,perlBracketsDQ keepend extend
254 " Below some hacks to recognise the // variant. This is virtually impossible to catch in all
255 " cases as the / is used in so many other ways, but these should be the most obvious ones.
256 syn region perlMatch matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[msixpodualgcn]*+ contains=@perlInterpSlash extend
260 " perlMatch is the first part, perlSubstitution* is the substitution part
261 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend
262 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend extend
263 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend extend
264 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend
265 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
266 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
267 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
268 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
269 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[msixpodualgcern]*+ keepend contained contains=@perlInterpDQ extend
270 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+(+ end=+)[msixpodualgcern]*+ contained contains=@perlInterpDQ,perlParensDQ keepend extend
271 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][msixpodualgcern]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend extend
272 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+{+ end=+}[msixpodualgcern]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend extend
273 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+<+ end=+>[msixpodualgcern]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend extend
274 syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[msixpodualgcern]*+ contained contains=@perlInterpSQ keepend extend
277 " perlMatch is the first part, perlTranslation* is the second, translator part.
278 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
279 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
280 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
281 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
282 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
283 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
284 syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cdsr]*+ contained
285 syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+(+ end=+)[cdsr]*+ contains=perlParensSQ contained
286 syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][cdsr]*+ contains=perlBracketsSQ contained
287 syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+{+ end=+}[cdsr]*+ contains=perlBracesSQ contained
288 syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+<+ end=+>[cdsr]*+ contains=perlAnglesSQ contained
291 " Strings and q, qq, qw and qr expressions
293 syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend extend
294 syn region perlString matchgroup=perlStringStartEnd start=+"+ end=+"+ contains=@perlInterpDQ keepend extend
295 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
296 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend extend
297 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
298 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
299 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
300 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
302 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend extend
303 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend extend
304 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend extend
305 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend extend
306 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend extend
307 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend extend
309 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
310 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+ end=+#+ contains=@perlInterpSQ keepend extend
311 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
312 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
313 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
314 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
316 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+ end=+\z1[imosxdual]*+ contains=@perlInterpMatch keepend extend
317 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+ end=+/[imosxdual]*+ contains=@perlInterpSlash keepend extend
318 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+ end=+#[imosxdual]*+ contains=@perlInterpMatch keepend extend
319 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+ end=+'[imosxdual]*+ contains=@perlInterpSQ keepend extend
320 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+ end=+)[imosxdual]*+ contains=@perlInterpMatch,perlParensDQ keepend extend
322 " A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern
323 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+ end=+}[imosxdual]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend
324 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+ end=+>[imosxdual]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend
325 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+ end=+\][imosxdual]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend
327 " Constructs such as print <<EOF [...] EOF, 'here' documents
329 " XXX Any statements after the identifier are in perlString colour (i.e.
330 " 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it
331 " seems due to the 'auto-extending nature' of regions.
332 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+ end=+$+ contains=@perlTop oneline
333 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+$+ contains=@perlTop oneline
334 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+$+ contains=@perlTop oneline
335 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*""+ end=+$+ contains=@perlTop oneline
336 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*''+ end=+$+ contains=@perlTop oneline
337 if exists("perl_fold")
338 syn region perlHereDoc start=+<<\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend
339 syn region perlHereDoc start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend
340 syn region perlHereDoc start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ fold extend
341 syn region perlHereDoc start=+<<\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend
342 syn region perlHereDoc start=+<<\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine fold extend
343 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold extend
345 syn region perlHereDoc start=+<<\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ
346 syn region perlHereDoc start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ
347 syn region perlHereDoc start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ
348 syn region perlHereDoc start=+<<\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine
349 syn region perlHereDoc start=+<<\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine
350 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL
356 syn match perlPackageDecl "\<package\s\+\%(\h\|::\)\%(\w\|::\)*" contains=perlStatementPackage
357 syn keyword perlStatementPackage package contained
360 " sub [name] [(prototype)] {
362 syn match perlSubError "[^[:space:];{#]" contained
363 syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained
364 syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ
365 syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError,perlFakeGroup
366 syn match perlSubAttributes "" contained nextgroup=perlSubError
367 syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe
368 if get(g:, "perl_sub_signatures", 0)
369 syn match perlSignature +(\_[^)]*)\_s*+ nextgroup=perlSubAttributes,perlComment contained
371 syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained
372 syn match perlSubPrototype +(\_[^)]*)\_s*+ nextgroup=perlSubAttributes,perlComment contained contains=perlSubPrototypeError
375 syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype,perlSignature,perlSubAttributes,perlComment
377 syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName
379 " The => operator forces a bareword to the left of it to be interpreted as
381 syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="
383 " All other # are comments, except ^#!
384 syn match perlComment "#.*" contains=perlTodo,@Spell extend
385 syn match perlSharpBang "^#!.*"
388 syn region perlFormat matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain,perlVarPlain2
389 syn match perlFormatName "format\s\+\k\+\s*="lc=7,me=e-1 contained
390 syn match perlFormatField "[@^][|<>~]\+\%(\.\.\.\)\=" contained
391 syn match perlFormatField "[@^]#[#.]*" contained
392 syn match perlFormatField "@\*" contained
393 syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained
394 syn match perlFormatField "@$" contained
396 " __END__ and __DATA__ clauses
397 if exists("perl_fold")
398 syntax region perlDATA start="^__DATA__$" skip="." end="." contains=@perlDATA fold
399 syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA fold
401 syntax region perlDATA start="^__DATA__$" skip="." end="." contains=@perlDATA
402 syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA
408 if exists("perl_fold")
409 " Note: this bit must come before the actual highlighting of the "package"
410 " keyword, otherwise this will screw up Pod lines that match /^package/
411 if !exists("perl_nofold_packages")
412 syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
414 if !exists("perl_nofold_subs")
415 if get(g:, "perl_fold_anonymous_subs", 0)
416 syn region perlSubFold start="\<sub\>[^{]*{" end="}" transparent fold keepend extend
417 syn region perlSubFold start="\<\%(BEGIN\|END\|CHECK\|INIT\)\>\s*{" end="}" transparent fold keepend
419 syn region perlSubFold start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
420 syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
424 if exists("perl_fold_blocks")
425 syn region perlBlockFold start="^\z(\s*\)\%(if\|elsif\|unless\|for\|while\|until\|given\)\s*(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" start="^\z(\s*\)for\%(each\)\=\s*\%(\%(my\|our\)\=\s*\S\+\s*\)\=(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
426 syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
429 setlocal foldmethod=syntax
432 " fromstart above seems to set minlines even if perl_fold is not set.
436 " NOTE: If you're linking new highlight groups to perlString, please also put
437 " them into b:match_skip in ftplugin/perl.vim.
439 " The default highlighting.
440 hi def link perlSharpBang PreProc
441 hi def link perlControl PreProc
442 hi def link perlInclude Include
443 hi def link perlSpecial Special
444 hi def link perlString String
445 hi def link perlCharacter Character
446 hi def link perlNumber Number
447 hi def link perlFloat Float
448 hi def link perlType Type
449 hi def link perlIdentifier Identifier
450 hi def link perlLabel Label
451 hi def link perlStatement Statement
452 hi def link perlConditional Conditional
453 hi def link perlRepeat Repeat
454 hi def link perlOperator Operator
455 hi def link perlFunction Keyword
456 hi def link perlSubName Function
457 hi def link perlSubPrototype Type
458 hi def link perlSignature Type
459 hi def link perlSubAttributes PreProc
460 hi def link perlSubAttributesCont perlSubAttributes
461 hi def link perlComment Comment
462 hi def link perlTodo Todo
463 if exists("perl_string_as_statement")
464 hi def link perlStringStartEnd perlStatement
466 hi def link perlStringStartEnd perlString
468 hi def link perlVStringV perlStringStartEnd
469 hi def link perlList perlStatement
470 hi def link perlMisc perlStatement
471 hi def link perlVarPlain perlIdentifier
472 hi def link perlVarPlain2 perlIdentifier
473 hi def link perlArrow perlIdentifier
474 hi def link perlFiledescRead perlIdentifier
475 hi def link perlFiledescStatement perlIdentifier
476 hi def link perlVarSimpleMember perlIdentifier
477 hi def link perlVarSimpleMemberName perlString
478 hi def link perlVarNotInMatches perlIdentifier
479 hi def link perlVarSlash perlIdentifier
480 hi def link perlQQ perlString
481 hi def link perlHereDoc perlString
482 hi def link perlStringUnexpanded perlString
483 hi def link perlSubstitutionSQ perlString
484 hi def link perlSubstitutionGQQ perlString
485 hi def link perlTranslationGQ perlString
486 hi def link perlMatch perlString
487 hi def link perlMatchStartEnd perlStatement
488 hi def link perlFormatName perlIdentifier
489 hi def link perlFormatField perlString
490 hi def link perlPackageDecl perlType
491 hi def link perlStorageClass perlType
492 hi def link perlPackageRef perlType
493 hi def link perlStatementPackage perlStatement
494 hi def link perlStatementStorage perlStatement
495 hi def link perlStatementControl perlStatement
496 hi def link perlStatementScalar perlStatement
497 hi def link perlStatementRegexp perlStatement
498 hi def link perlStatementNumeric perlStatement
499 hi def link perlStatementList perlStatement
500 hi def link perlStatementHash perlStatement
501 hi def link perlStatementIOfunc perlStatement
502 hi def link perlStatementFiledesc perlStatement
503 hi def link perlStatementVector perlStatement
504 hi def link perlStatementFiles perlStatement
505 hi def link perlStatementFlow perlStatement
506 hi def link perlStatementInclude perlStatement
507 hi def link perlStatementProc perlStatement
508 hi def link perlStatementSocket perlStatement
509 hi def link perlStatementIPC perlStatement
510 hi def link perlStatementNetwork perlStatement
511 hi def link perlStatementPword perlStatement
512 hi def link perlStatementTime perlStatement
513 hi def link perlStatementMisc perlStatement
514 hi def link perlStatementIndirObj perlStatement
515 hi def link perlFunctionName perlIdentifier
516 hi def link perlMethod perlIdentifier
517 hi def link perlPostDeref perlIdentifier
518 hi def link perlFunctionPRef perlType
519 if !get(g:, 'perl_include_pod', 1)
520 hi def link perlPOD perlComment
522 hi def link perlShellCommand perlString
523 hi def link perlSpecialAscii perlSpecial
524 hi def link perlSpecialDollar perlSpecial
525 hi def link perlSpecialString perlSpecial
526 hi def link perlSpecialStringU perlSpecial
527 hi def link perlSpecialMatch perlSpecial
528 hi def link perlDATA perlComment
530 " NOTE: Due to a bug in Vim (or more likely, a misunderstanding on my part),
531 " I had to remove the transparent property from the following regions
532 " in order to get them to highlight correctly. Feel free to remove
533 " these and reinstate the transparent property if you know how.
534 hi def link perlParensSQ perlString
535 hi def link perlBracketsSQ perlString
536 hi def link perlBracesSQ perlString
537 hi def link perlAnglesSQ perlString
539 hi def link perlParensDQ perlString
540 hi def link perlBracketsDQ perlString
541 hi def link perlBracesDQ perlString
542 hi def link perlAnglesDQ perlString
544 hi def link perlSpecialStringU2 perlString
547 hi def link perlNotEmptyLine Error
548 hi def link perlElseIfError Error
549 hi def link perlSubPrototypeError Error
550 hi def link perlSubError Error
552 " Syncing to speed up processing
554 if !exists("perl_no_sync_on_sub")
555 syn sync match perlSync grouphere NONE "^\s*\<package\s"
556 syn sync match perlSync grouphere NONE "^\s*\<sub\>"
557 syn sync match perlSync grouphere NONE "^}"
560 if !exists("perl_no_sync_on_global_var")
561 syn sync match perlSync grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{"
562 syn sync match perlSync grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*("
565 if exists("perl_sync_dist")
566 execute "syn sync maxlines=" . perl_sync_dist
568 syn sync maxlines=100
571 syn sync match perlSyncPOD grouphere perlPOD "^=pod"
572 syn sync match perlSyncPOD grouphere perlPOD "^=head"
573 syn sync match perlSyncPOD grouphere perlPOD "^=item"
574 syn sync match perlSyncPOD grouphere NONE "^=cut"
576 let b:current_syntax = "perl"
578 let &cpo = s:cpo_save
581 " XXX Change to sts=4:sw=4
582 " vim:ts=8:sts=2:sw=2:expandtab:ft=vim