blob: 5510c4b615d7c6d9d509379d046da3ca21eba001 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar00a927d2010-05-14 23:24:24 +02002" Language: Perl 5
3" Maintainer: Andy Lester <andy@petdance.com>
4" URL: http://github.com/petdance/vim-perl/tree/master
Bram Moolenaarf3549812010-08-13 12:09:22 +02005" Last Change: 2010-08-10
Bram Moolenaar00a927d2010-05-14 23:24:24 +02006" Contributors: Andy Lester <andy@petdance.com>
7" Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
8" Lukas Mai <l.mai.web.de>
9" Nick Hibma <nick@van-laarhoven.org>
10" Sonia Heimann <niania@netsurf.org>
11" and many others.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012"
13" Please download most recent version first before mailing
14" any comments.
Bram Moolenaar071d4272004-06-13 20:20:40 +000015"
Bram Moolenaar071d4272004-06-13 20:20:40 +000016" The following parameters are available for tuning the
17" perl syntax highlighting, with defaults given:
18"
19" unlet perl_include_pod
Bram Moolenaar00a927d2010-05-14 23:24:24 +020020" unlet perl_no_scope_in_variables
21" unlet perl_no_extended_vars
Bram Moolenaar071d4272004-06-13 20:20:40 +000022" unlet perl_string_as_statement
23" unlet perl_no_sync_on_sub
24" unlet perl_no_sync_on_global_var
25" let perl_sync_dist = 100
26" unlet perl_fold
27" unlet perl_fold_blocks
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000028" let perl_nofold_packages = 1
29" let perl_nofold_subs = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +000030
Bram Moolenaarf3549812010-08-13 12:09:22 +020031if exists("b:current_syntax")
Bram Moolenaar00a927d2010-05-14 23:24:24 +020032 finish
Bram Moolenaar071d4272004-06-13 20:20:40 +000033endif
34
35
36" POD starts with ^=<word> and ends with ^=cut
37
38if exists("perl_include_pod")
39 " Include a while extra syntax file
40 syn include @Pod syntax/pod.vim
41 unlet b:current_syntax
42 if exists("perl_fold")
Bram Moolenaara5792f52005-11-23 21:25:05 +000043 syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold
Bram Moolenaar071d4272004-06-13 20:20:40 +000044 syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold
45 else
Bram Moolenaara5792f52005-11-23 21:25:05 +000046 syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +000047 syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
48 endif
49else
50 " Use only the bare minimum of rules
51 if exists("perl_fold")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000052 syn region perlPOD start="^=[a-z]" end="^=cut" fold
Bram Moolenaar071d4272004-06-13 20:20:40 +000053 else
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000054 syn region perlPOD start="^=[a-z]" end="^=cut"
Bram Moolenaar071d4272004-06-13 20:20:40 +000055 endif
56endif
57
58
Bram Moolenaar00a927d2010-05-14 23:24:24 +020059syn cluster perlTop contains=TOP
60syn region perlGenericBlock matchgroup=perlGenericBlock start="{" end="}" contained transparent
61
62
Bram Moolenaar071d4272004-06-13 20:20:40 +000063" All keywords
64"
Bram Moolenaar00a927d2010-05-14 23:24:24 +020065syn match perlConditional "\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
66syn match perlConditional "\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty
67syn match perlRepeat "\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
68syn match perlOperator "\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
69syn match perlControl "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000070
Bram Moolenaar00a927d2010-05-14 23:24:24 +020071syn match perlStatementStorage "\<\%(my\|our\|local\|state\)\>"
72syn match perlStatementControl "\<\%(return\|last\|next\|redo\|goto\|break\)\>"
73syn match perlStatementScalar "\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|uc\%(first\)\=\)\>"
74syn match perlStatementRegexp "\<\%(pos\|quotemeta\|split\|study\)\>"
75syn match perlStatementNumeric "\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>"
76syn match perlStatementList "\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>"
77syn match perlStatementHash "\<\%(delete\|each\|exists\|keys\|values\)\>"
78syn match perlStatementIOfunc "\<\%(syscall\|dbmopen\|dbmclose\)\>"
79syn match perlStatementFiledesc "\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite
80syn match perlStatementFiledesc "\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite
81syn match perlStatementVector "\<vec\>"
82syn match perlStatementFiles "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>"
83syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
84syn match perlStatementFlow "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\)\>"
85syn match perlStatementInclude "\<require\>"
86syn match perlStatementInclude "\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|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\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\="
87syn match perlStatementProc "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>"
88syn match perlStatementSocket "\<\%(acept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"
89syn match perlStatementIPC "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>"
90syn match perlStatementNetwork "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>"
91syn match perlStatementPword "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>"
92syn match perlStatementTime "\<\%(gmtime\|localtime\|time\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000093
Bram Moolenaar00a927d2010-05-14 23:24:24 +020094syn match perlStatementMisc "\<\%(warn\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000095
Bram Moolenaar00a927d2010-05-14 23:24:24 +020096syn keyword perlTodo TODO TBD FIXME XXX NOTE contained
97
98syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|print\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlGenericBlock
99
100syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101
102" Perl Identifiers.
103"
104" Should be cleaned up to better handle identifiers in particular situations
105" (in hash keys for example)
106"
107" Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc.
108" We do not process complex things such as @{${"foo"}}. Too complicated, and
109" too slow. And what is after the -> is *not* considered as part of the
110" variable - there again, too complicated and too slow.
111
112" Special variables first ($^A, ...) and ($|, $', ...)
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200113syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\="
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000114syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"
Bram Moolenaar9de99972010-08-09 22:33:06 +0200115syn match perlVarPlain "%+"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200116syn match perlVarPlain "$\%(0\|[1-9]\d*\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117" Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200118syn match perlVarPlain "$::\@!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000119" These variables are not recognized within matches.
120syn match perlVarNotInMatches "$[|)]"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000121" This variable is not recognized within matches delimited by m//.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000122syn match perlVarSlash "$/"
123
124" And plain identifiers
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200125syn match perlPackageRef "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200127" To not highlight packages in variables as a scope reference - i.e. in
128" $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables"
129" If you don't want complex things like @{${"foo"}} to be processed,
130" just set the variable "perl_no_extended_vars"...
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000131
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200132if !exists("perl_no_scope_in_variables")
133 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
134 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef
135 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136else
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200137 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
138 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)"
139 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000140endif
141
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200142if !exists("perl_no_extended_vars")
143 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,perlGenericBlock
144 syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
145 syn region perlArrow matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
146 syn region perlArrow matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
147 syn match perlArrow "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
148 syn region perlArrow matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
149 syn region perlVarBlock matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
150 syn region perlVarBlock2 matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
151 syn match perlVarPlain2 "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
152 syn match perlVarPlain "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
153 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
154 syn match perlVarSimpleMember "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155 syn match perlVarSimpleMemberName "\I\i*" contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200156 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
157 syn match perlPackageConst "__PACKAGE__" nextgroup=perlMethod
158 syn match perlMethod "->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159endif
160
161" File Descriptors
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200162syn match perlFiledescRead "<\h\w*>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000163
164syn match perlFiledescStatementComma "(\=\s*\u\w*\s*,"me=e-1 transparent contained contains=perlFiledescStatement
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000165syn match perlFiledescStatementNocomma "(\=\s*\u\w*\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000166
167syn match perlFiledescStatement "\u\w*" contained
168
169" Special characters in strings and matches
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200170syn match perlSpecialString "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend
171syn match perlSpecialStringU2 "\\." extend contained transparent contains=NONE
172syn match perlSpecialStringU "\\\\" contained
173syn match perlSpecialMatch "\\[1-9]" contained extend
174syn match perlSpecialMatch "\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
175syn match perlSpecialMatch "\\k\%(<\h\w*>\|'\h\w*'\)" contained
176syn match perlSpecialMatch "{\d\+\%(,\%(\d\+\)\=\)\=}" contained
177syn match perlSpecialMatch "\[[]-]\=[^\[\]]*[]-]\=\]" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178syn match perlSpecialMatch "[+*()?.]" contained
179syn match perlSpecialMatch "(?[#:=!]" contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200180syn match perlSpecialMatch "(?[impsx]*\%(-[imsx]\+\)\=)" contained
181syn match perlSpecialMatch "(?\%([-+]\=\d\+\|R\))" contained
182syn match perlSpecialMatch "(?\%(&\|P[>=]\)\h\w*)" contained
183syn match perlSpecialMatch "(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000184
185" Possible errors
186"
187" Highlight lines with only whitespace (only in blank delimited here documents) as errors
188syn match perlNotEmptyLine "^\s\+$" contained
189" Highlight '} else if (...) {', it should be '} else { if (...) { ' or
190" '} elsif (...) {'.
Bram Moolenaar9de99972010-08-09 22:33:06 +0200191syn match perlElseIfError "\s\+if" contained
192syn keyword perlElseIfError elseif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000193
194" Variable interpolation
195"
196" These items are interpolated inside "" strings and similar constructs.
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000197syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198" These items are interpolated inside '' strings and similar constructs.
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200199syn cluster perlInterpSQ contains=perlSpecialStringU,perlSpecialStringU2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200" These items are interpolated inside m// matches and s/// substitutions.
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200201syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock
Bram Moolenaar071d4272004-06-13 20:20:40 +0000202" These items are interpolated inside m## matches and s### substitutions.
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000203syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204
205" Shell commands
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200206syn region perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000207
208" Constants
209"
210" Numbers
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200211syn match perlNumber "\<\%(0\%(x\x[[:xdigit:]_]*\|b[01][01_]*\|\o[0-7_]*\|\)\|[1-9][[:digit:]_]*\)\>"
212syn match perlFloat "\<\d[[:digit:]_]*[eE][\-+]\=\d\+"
213syn match perlFloat "\<\d[[:digit:]_]*\.[[:digit:]_]*\%([eE][\-+]\=\d\+\)\="
214syn match perlFloat "\.[[:digit:]_]\+\%([eE][\-+]\=\d\+\)\="
215
216syn match perlString "\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV
217syn match perlVStringV "\<v" contained
218
219
220syn region perlParensSQ start=+(+ end=+)+ extend contained transparent contains=perlParensSQ,@perlInterpSQ keepend
221syn region perlBracketsSQ start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsSQ,@perlInterpSQ keepend
222syn region perlBracesSQ start=+{+ end=+}+ extend contained transparent contains=perlBracesSQ,@perlInterpSQ keepend
223syn region perlAnglesSQ start=+<+ end=+>+ extend contained transparent contains=perlAnglesSQ,@perlInterpSQ keepend
224
225syn region perlParensDQ start=+(+ end=+)+ extend contained transparent contains=perlParensDQ,@perlInterpDQ keepend
226syn region perlBracketsDQ start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsDQ,@perlInterpDQ keepend
227syn region perlBracesDQ start=+{+ end=+}+ extend contained transparent contains=perlBracesDQ,@perlInterpDQ keepend
228syn region perlAnglesDQ start=+<+ end=+>+ extend contained transparent contains=perlAnglesDQ,@perlInterpDQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229
230
231" Simple version of searches and matches
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200232syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[cgimopsx]*+ contains=@perlInterpMatch keepend
233syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[cgimopsx]*+ contains=@perlInterpMatch keepend
234syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[cgimopsx]*+ contains=@perlInterpSQ keepend
235syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash keepend
236syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[cgimopsx]*+ contains=@perlInterpMatch,perlParensDQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200238" A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern
239syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ keepend
240syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[cgimopsx]*+ contains=@perlInterpMatch,perlAnglesDQ keepend
241syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242
243" Below some hacks to recognise the // variant. This is virtually impossible to catch in all
244" cases as the / is used in so many other ways, but these should be the most obvious ones.
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200245syn 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=+/[cgimopsx]*+ contains=@perlInterpSlash
Bram Moolenaar071d4272004-06-13 20:20:40 +0000246
247
248" Substitutions
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249" perlMatch is the first part, perlSubstitution* is the substitution part
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200250syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend
251syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend
252syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend
253syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend
254syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
255syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
256syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
257syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
258syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[ecgimopsx]*+ keepend contained contains=@perlInterpDQ
259syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+(+ end=+)[ecgimopsx]*+ contained contains=@perlInterpDQ,perlParensDQ keepend
260syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend
261syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+{+ end=+}[ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend
262syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+<+ end=+>[ecgimopsx]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend
263syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[ecgimopsx]*+ contained contains=@perlInterpSQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000264
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200265" Translations
Bram Moolenaar071d4272004-06-13 20:20:40 +0000266" perlMatch is the first part, perlTranslation* is the second, translator part.
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200267syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
268syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
269syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
270syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
271syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
272syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
273syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cds]*+ contained
274syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+(+ end=+)[cds]*+ contains=perlParensSQ contained
275syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contains=perlBracketsSQ contained
276syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contains=perlBracesSQ contained
277syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+<+ end=+>[cds]*+ contains=perlAnglesSQ contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278
279
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280" Strings and q, qq, qw and qr expressions
281
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200282syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend
283syn region perlString matchgroup=perlStringStartEnd start=+"+ end=+"+ contains=@perlInterpDQ keepend
284syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend
285syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend
286syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
287syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
288syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
289syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200291syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend
292syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend
293syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend
294syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend
295syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend
296syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend
297
298syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend
299syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+ end=+#+ contains=@perlInterpSQ keepend
300syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
301syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
302syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
303syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
304
305syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+ end=+\z1[imosx]*+ contains=@perlInterpMatch keepend
306syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+ end=+/[imosx]*+ contains=@perlInterpSlash keepend
307syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+ end=+#[imosx]*+ contains=@perlInterpMatch keepend
308syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+ end=+'[imosx]*+ contains=@perlInterpSQ keepend
309syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+ end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend
310
311" A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern
312syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+ end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend
313syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+ end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend
314syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+ end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000315
316" Constructs such as print <<EOF [...] EOF, 'here' documents
317"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200318" XXX Any statements after the identifier are in perlString colour (i.e.
319" 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it
320" seems due to the 'auto-extending nature' of regions.
321if exists("perl_fold")
322 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+ end=+^\z1$+ contains=@perlInterpDQ fold
323 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold
324 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold
325 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine fold
326 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine fold
327 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000328else
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200329 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+ end=+^\z1$+ contains=@perlInterpDQ
330 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ
331 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ
332 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine
333 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine
334 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL
Bram Moolenaar071d4272004-06-13 20:20:40 +0000335endif
336
337
338" Class declarations
339"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200340syn match perlPackageDecl "\<package\s\+\%(\h\|::\)\%(\w\|::\)*" contains=perlStatementPackage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000341syn keyword perlStatementPackage package contained
342
343" Functions
344" sub [name] [(prototype)] {
345"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200346syn match perlSubError "[^[:space:];{#]" contained
347if v:version == 701 && !has('patch221') " XXX I hope that's the right one
348 syn match perlSubAttributes ":" contained
349else
350 syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained
351 syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ
352 syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError
353 syn match perlSubAttributes "" contained nextgroup=perlSubError
354 syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe
355endif
356syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained
357syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes contained contains=perlSubPrototypeError
358syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype
Bram Moolenaar071d4272004-06-13 20:20:40 +0000359
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200360syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName
361
362if !exists("perl_no_scope_in_variables")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000363 syn match perlFunctionPRef "\h\w*::" contained
364 syn match perlFunctionName "\h\w*[^:]" contained
365else
366 syn match perlFunctionName "\h[[:alnum:]_:]*" contained
367endif
368
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200369" The => operator forces a bareword to the left of it to be interpreted as
370" a string
371syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="
372
Bram Moolenaar071d4272004-06-13 20:20:40 +0000373" All other # are comments, except ^#!
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200374syn match perlComment "#.*" contains=perlTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000375syn match perlSharpBang "^#!.*"
376
377" Formats
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000378syn region perlFormat matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain,perlVarPlain2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000379syn match perlFormatName "format\s\+\k\+\s*="lc=7,me=e-1 contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200380syn match perlFormatField "[@^][|<>~]\+\%(\.\.\.\)\=" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000381syn match perlFormatField "[@^]#[#.]*" contained
382syn match perlFormatField "@\*" contained
383syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained
384syn match perlFormatField "@$" contained
385
386" __END__ and __DATA__ clauses
387if exists("perl_fold")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200388 syntax region perlDATA start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000389else
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200390 syntax region perlDATA start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA
Bram Moolenaar071d4272004-06-13 20:20:40 +0000391endif
392
Bram Moolenaarf3549812010-08-13 12:09:22 +0200393"
394" Folding
395
396if exists("perl_fold")
397 " Note: this bit must come before the actual highlighting of the "package"
398 " keyword, otherwise this will screw up Pod lines that match /^package/
399 if !exists("perl_nofold_packages")
400 syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
401 endif
402 if !exists("perl_nofold_subs")
403 syn region perlSubFold start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
404 syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
405 endif
406
407 if exists("perl_fold_blocks")
408 syn region perlBlockFold start="^\z(\s*\)\%(if\|elsif\|unless\|for\|while\|until\|given\)\s*(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" start="^\z(\s*\)foreach\s*\%(\%(my\|our\)\=\s*\S\+\s*\)\=(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
409 syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
410 endif
411
412 setlocal foldmethod=syntax
413 syn sync fromstart
414else
415 " fromstart above seems to set minlines even if perl_fold is not set.
416 syn sync minlines=0
417endif
418
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200419command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000420
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200421" The default highlighting.
422HiLink perlSharpBang PreProc
423HiLink perlControl PreProc
424HiLink perlInclude Include
425HiLink perlSpecial Special
426HiLink perlString String
427HiLink perlCharacter Character
428HiLink perlNumber Number
429HiLink perlFloat Float
430HiLink perlType Type
431HiLink perlIdentifier Identifier
432HiLink perlLabel Label
433HiLink perlStatement Statement
434HiLink perlConditional Conditional
435HiLink perlRepeat Repeat
436HiLink perlOperator Operator
437HiLink perlFunction Keyword
438HiLink perlSubName Function
439HiLink perlSubPrototype Type
440HiLink perlSubAttributes PreProc
441HiLink perlSubAttributesCont perlSubAttributes
442HiLink perlComment Comment
443HiLink perlTodo Todo
444if exists("perl_string_as_statement")
445 HiLink perlStringStartEnd perlStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000446else
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200447 HiLink perlStringStartEnd perlString
Bram Moolenaar071d4272004-06-13 20:20:40 +0000448endif
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200449HiLink perlVStringV perlStringStartEnd
450HiLink perlList perlStatement
451HiLink perlMisc perlStatement
452HiLink perlVarPlain perlIdentifier
453HiLink perlVarPlain2 perlIdentifier
454HiLink perlArrow perlIdentifier
455HiLink perlFiledescRead perlIdentifier
456HiLink perlFiledescStatement perlIdentifier
457HiLink perlVarSimpleMember perlIdentifier
458HiLink perlVarSimpleMemberName perlString
459HiLink perlVarNotInMatches perlIdentifier
460HiLink perlVarSlash perlIdentifier
461HiLink perlQQ perlString
462HiLink perlHereDoc perlString
463HiLink perlStringUnexpanded perlString
464HiLink perlSubstitutionSQ perlString
465HiLink perlSubstitutionGQQ perlString
466HiLink perlTranslationGQ perlString
467HiLink perlMatch perlString
468HiLink perlMatchStartEnd perlStatement
469HiLink perlFormatName perlIdentifier
470HiLink perlFormatField perlString
471HiLink perlPackageDecl perlType
472HiLink perlStorageClass perlType
473HiLink perlPackageRef perlType
474HiLink perlStatementPackage perlStatement
475HiLink perlStatementStorage perlStatement
476HiLink perlStatementControl perlStatement
477HiLink perlStatementScalar perlStatement
478HiLink perlStatementRegexp perlStatement
479HiLink perlStatementNumeric perlStatement
480HiLink perlStatementList perlStatement
481HiLink perlStatementHash perlStatement
482HiLink perlStatementIOfunc perlStatement
483HiLink perlStatementFiledesc perlStatement
484HiLink perlStatementVector perlStatement
485HiLink perlStatementFiles perlStatement
486HiLink perlStatementFlow perlStatement
487HiLink perlStatementInclude perlStatement
488HiLink perlStatementProc perlStatement
489HiLink perlStatementSocket perlStatement
490HiLink perlStatementIPC perlStatement
491HiLink perlStatementNetwork perlStatement
492HiLink perlStatementPword perlStatement
493HiLink perlStatementTime perlStatement
494HiLink perlStatementMisc perlStatement
495HiLink perlStatementIndirObj perlStatement
496HiLink perlFunctionName perlIdentifier
497HiLink perlMethod perlIdentifier
498HiLink perlFunctionPRef perlType
499HiLink perlPOD perlComment
500HiLink perlShellCommand perlString
501HiLink perlSpecialAscii perlSpecial
502HiLink perlSpecialDollar perlSpecial
503HiLink perlSpecialString perlSpecial
504HiLink perlSpecialStringU perlSpecial
505HiLink perlSpecialMatch perlSpecial
506HiLink perlDATA perlComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000507
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200508" Possible errors
509HiLink perlNotEmptyLine Error
510HiLink perlElseIfError Error
511HiLink perlSubPrototypeError Error
512HiLink perlSubError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000513
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200514delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000515
516" Syncing to speed up processing
517"
518if !exists("perl_no_sync_on_sub")
519 syn sync match perlSync grouphere NONE "^\s*\<package\s"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200520 syn sync match perlSync grouphere NONE "^\s*\<sub\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000521 syn sync match perlSync grouphere NONE "^}"
522endif
523
524if !exists("perl_no_sync_on_global_var")
525 syn sync match perlSync grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{"
526 syn sync match perlSync grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*("
527endif
528
529if exists("perl_sync_dist")
530 execute "syn sync maxlines=" . perl_sync_dist
531else
532 syn sync maxlines=100
533endif
534
535syn sync match perlSyncPOD grouphere perlPOD "^=pod"
536syn sync match perlSyncPOD grouphere perlPOD "^=head"
537syn sync match perlSyncPOD grouphere perlPOD "^=item"
538syn sync match perlSyncPOD grouphere NONE "^=cut"
539
540let b:current_syntax = "perl"
541
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200542" XXX Change to sts=4:sw=4
543" vim:ts=8:sts=2:sw=2:expandtab:ft=vim