Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
perl.vim663 linesDownload Raw Back to syntax
1" Vim syntax file2" Language:      Perl3" Maintainer:    vim-perl <vim-perl@googlegroups.com> (need to be subscribed to post)4" Homepage:      https://github.com/vim-perl/vim-perl5" Bugs/requests: https://github.com/vim-perl/vim-perl/issues6" License:       Vim License (see :help license)7" Last Change:   2022 Jun 138" Contributors:  Andy Lester <andy@petdance.com>9"                Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>10"                Lukas Mai <l.mai.web.de>11"                Nick Hibma <nick@van-laarhoven.org>12"                Sonia Heimann <niania@netsurf.org>13"                Rob Hoelz <rob@hoelz.ro>14"                Doug Kearns <dougkearns@gmail.com>15"                and many others.16"17" Please download the most recent version first, before mailing18" any comments.19"20" The following parameters are available for tuning the21" perl syntax highlighting, with defaults given:22"23" let perl_include_pod = 124" unlet perl_no_scope_in_variables25" unlet perl_no_extended_vars26" unlet perl_string_as_statement27" unlet perl_no_sync_on_sub28" unlet perl_no_sync_on_global_var29" let perl_sync_dist = 10030" unlet perl_fold31" unlet perl_fold_blocks32" unlet perl_nofold_packages33" unlet perl_nofold_subs34" unlet perl_fold_anonymous_subs35" unlet perl_no_subprototype_error36 37if exists("b:current_syntax")38  finish39endif40 41let s:cpo_save = &cpo42set cpo&vim43 44" POD starts with ^=<word> and ends with ^=cut45 46if get(g:, 'perl_include_pod', 1)47  " Include a while extra syntax file48  syn include @Pod syntax/pod.vim49  unlet b:current_syntax50  if get(g:, 'perl_fold', 1)51    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold extend52    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold extend53  else54    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend55    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend56  endif57else58  " Use only the bare minimum of rules59  if get(g:, 'perl_fold', 1)60    syn region perlPOD start="^=[a-z]" end="^=cut" fold61  else62    syn region perlPOD start="^=[a-z]" end="^=cut"63  endif64endif65 66 67syn cluster perlTop		contains=TOP68 69syn region perlBraces start="{" end="}" transparent extend70 71" All keywords72"73syn match perlConditional		"\<\%(if\|elsif\|unless\|given\|when\|default\)\>"74syn match perlConditional		"\<else\%(\%(\_s\*if\>\)\|\>\)" contains=perlElseIfError skipwhite skipnl skipempty75syn match perlRepeat			"\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"76syn match perlOperator			"\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"77" for some reason, adding this as the nextgroup for perlControl fixes BEGIN78" folding issues...79syn match perlFakeGroup 		"" contained80syn match perlControl			"\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup81 82syn match perlStatementStorage		"\<\%(my\|our\|local\|state\)\>"83syn match perlStatementControl		"\<\%(return\|last\|next\|redo\|goto\|break\)\>"84syn match perlStatementScalar		"\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|fc\|uc\%(first\)\=\)\>"85syn match perlStatementRegexp		"\<\%(pos\|quotemeta\|split\|study\)\>"86syn match perlStatementNumeric		"\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>"87syn match perlStatementList		"\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>"88syn match perlStatementHash		"\<\%(delete\|each\|exists\|keys\|values\)\>"89syn match perlStatementIOfunc		"\<\%(syscall\|dbmopen\|dbmclose\)\>"90syn match perlStatementFiledesc		"\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite91syn match perlStatementFiledesc		"\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite92syn match perlStatementVector		"\<vec\>"93syn match perlStatementFiles		"\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>"94syn match perlStatementFiles		"-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"95syn match perlStatementFlow		"\<\%(caller\|die\|dump\|eval\|exit\|wantarray\|evalbytes\)\>"96syn match perlStatementInclude		"\<\%(require\|import\|unimport\)\>"97syn match perlStatementInclude		"\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autodie\%(::\%(exception\%(::system\)\=\|hints\|skip\)\)\=\|autouse\|parent\|base\|big\%(int\|num\|rat\)\|blib\|bytes\|charnames\|constant\|deprecate\|diagnostics\|encoding\%(::warnings\)\=\|experimental\|feature\|fields\|filetest\|if\|integer\|less\|lib\|locale\|mro\|ok\|open\|ops\|overload\|overloading\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\="98syn match perlStatementProc		"\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>"99syn match perlStatementSocket		"\<\%(accept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"100syn match perlStatementIPC		"\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>"101syn match perlStatementNetwork		"\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>"102syn match perlStatementPword		"\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>"103syn match perlStatementTime		"\<\%(gmtime\|localtime\|time\)\>"104 105syn match perlStatementMisc		"\<\%(warn\|format\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"106 107syn keyword perlTodo			TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained108 109syn region perlStatementIndirObjWrap   matchgroup=perlStatementIndirObj start="\%(\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*\)\@<={" end="}" transparent extend110 111syn match perlLabel      "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"112 113" Perl Identifiers.114"115" Should be cleaned up to better handle identifiers in particular situations116" (in hash keys for example)117"118" Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc.119" We do not process complex things such as @{${"foo"}}. Too complicated, and120" too slow. And what is after the -> is *not* considered as part of the121" variable - there again, too complicated and too slow.122 123" Special variables first ($^A, ...) and ($|, $', ...)124syn match  perlVarPlain		 "$^[ACDEFHILMNOPRSTVWX]\="125syn match  perlVarPlain		 "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"126syn match  perlVarPlain		 "@[-+]"127syn match  perlVarPlain		 "$\%(0\|[1-9]\d*\)"128" Same as above, but avoids confusion in $::foo (equivalent to $main::foo)129syn match  perlVarPlain		 "$::\@!"130" These variables are not recognized within matches.131syn match  perlVarNotInMatches	 "$[|)]"132" This variable is not recognized within matches delimited by m//.133syn match  perlVarSlash		 "$/"134 135" And plain identifiers136syn match  perlPackageRef	 "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained137 138" To not highlight packages in variables as a scope reference - i.e. in139" $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables"140" If you don't want complex things like @{${"foo"}} to be processed,141" just set the variable "perl_no_extended_vars"...142 143if !get(g:, 'perl_no_scope_in_variables', 0)144  syn match  perlVarPlain       "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref145  syn match  perlVarPlain2                   "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref146  syn match  perlFunctionName                "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref147else148  syn match  perlVarPlain       "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref149  syn match  perlVarPlain2                   "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref150  syn match  perlFunctionName                "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref151endif152 153syn match  perlVarPlain2	 "%[-+]"154 155if !get(g:, 'perl_no_extended_vars', 0)156  syn cluster perlExpr		contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQ,perlQQ,perlQW,perlQR,perlArrow,perlBraces157  syn region perlArrow		matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained158  syn region perlArrow		matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained159  syn region perlArrow		matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained160  syn match  perlArrow		"->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained161  syn region perlVarBlock	matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend162  syn region perlVarBlock2	matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend163  syn match  perlVarPlain2	"[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend164  syn match  perlVarPlain	"\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend165  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend166  syn match  perlVarSimpleMember	"\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contains=perlVarSimpleMemberName contained extend167  syn match  perlVarSimpleMemberName	"\I\i*" contained168  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend169  syn match perlPackageConst	"__PACKAGE__" nextgroup=perlPostDeref170  syn match  perlPostDeref	"->\%($#\|[$@%&*]\)\*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlPostDeref171  syn region  perlPostDeref	start="->\%($#\|[$@%&*]\)\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlPostDeref172  syn region  perlPostDeref	matchgroup=perlPostDeref start="->\%($#\|[$@%&*]\){" skip="\\}" end="}" keepend extend contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlPostDeref173endif174 175" File Descriptors176syn match  perlFiledescRead	"<\h\w*>"177 178syn match  perlFiledescStatementComma	"(\=\s*\<\u\w*\>\s*,"me=e-1 transparent contained contains=perlFiledescStatement179syn match  perlFiledescStatementNocomma "(\=\s*\<\u\w*\>\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement180 181syn match  perlFiledescStatement	"\<\u\w*\>" contained182 183" Special characters in strings and matches184syn match  perlSpecialString	"\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend185syn match  perlSpecialStringU2	"\\." extend contained contains=NONE186syn match  perlSpecialStringU	"\\\\" contained187syn match  perlSpecialMatch	"\\[1-9]" contained extend188syn match  perlSpecialMatch	"\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained189syn match  perlSpecialMatch	"\\k\%(<\h\w*>\|'\h\w*'\)" contained190syn match  perlSpecialMatch	"{\d\+\%(,\%(\d\+\)\=\)\=}" contained191syn match  perlSpecialMatch	"\[[]-]\=[^\[\]]*[]-]\=\]" contained extend192syn match  perlSpecialMatch	"[+*()?.]" contained193syn match  perlSpecialMatch	"(?[#:=!]" contained194syn match  perlSpecialMatch	"(?[impsx]*\%(-[imsx]\+\)\=)" contained195syn match  perlSpecialMatch	"(?\%([-+]\=\d\+\|R\))" contained196syn match  perlSpecialMatch	"(?\%(&\|P[>=]\)\h\w*)" contained197syn match  perlSpecialMatch	"(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained198 199" Possible errors200"201" Highlight lines with only whitespace (only in blank delimited here documents) as errors202syn match  perlNotEmptyLine	"^\s\+$" contained203" Highlight "} else if (...) {", it should be "} else { if (...) { " or "} elsif (...) {"204syn match perlElseIfError	"else\_s*if" containedin=perlConditional205syn keyword perlElseIfError	elseif containedin=perlConditional206 207" Variable interpolation208"209" These items are interpolated inside "" strings and similar constructs.210syn cluster perlInterpDQ	contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock211" These items are interpolated inside '' strings and similar constructs.212syn cluster perlInterpSQ	contains=perlSpecialStringU,perlSpecialStringU2213" These items are interpolated inside m// matches and s/// substitutions.214syn cluster perlInterpSlash	contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock215" These items are interpolated inside m## matches and s### substitutions.216syn cluster perlInterpMatch	contains=@perlInterpSlash,perlVarSlash217 218" Shell commands219syn region  perlShellCommand	matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend220 221" Constants222"223" Numbers224syn case   ignore225syn match  perlNumber	"\<\%(0\|[1-9]\%(_\=\d\)*\)\>"226syn match  perlNumber	"\<0\%(x\x\%(_\=\x\)*\|b[01]\%(_\=[01]\)*\|o\=\%(_\=\o\)*\)\>"227syn match  perlFloat	"\<\d\%(_\=\d\)*e[-+]\=\d\%(_\=\d\)*"228syn match  perlFloat	"\<\d\%(_\=\d\)*\.\%(\d\%(_\=\d\)*\)\=\%(e[-+]\=\d\%(_\=\d\)*\)\="229syn match  perlFloat    "\.\d\%(_\=\d\)*\%(e[-+]\=\d\%(_\=\d\)*\)\="230syn match  perlFloat	"\<0x\x\%(_\=\x\)*p[-+]\=\d\%(_\=\d\)*"231syn match  perlFloat	"\<0x\x\%(_\=\x\)*\.\%(\x\%(_\=\x\)*\)\=\%(p[-+]\=\d\%(_\=\d\)*\)\="232syn match  perlFloat    "\<0x\.\x\%(_\=\x\)*\%(p[-+]\=\d\%(_\=\d\)*\)\="233syn case   match234 235syn match  perlString	"\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV236syn match  perlVStringV	"\<v" contained237 238 239syn region perlParensSQ		start=+(+ end=+)+ extend contained contains=perlParensSQ,@perlInterpSQ keepend240syn region perlBracketsSQ	start=+\[+ end=+\]+ extend contained contains=perlBracketsSQ,@perlInterpSQ keepend241syn region perlBracesSQ		start=+{+ end=+}+ extend contained contains=perlBracesSQ,@perlInterpSQ keepend242syn region perlAnglesSQ		start=+<+ end=+>+ extend contained contains=perlAnglesSQ,@perlInterpSQ keepend243 244syn region perlParensDQ		start=+(+ end=+)+ extend contained contains=perlParensDQ,@perlInterpDQ keepend245syn region perlBracketsDQ	start=+\[+ end=+\]+ extend contained contains=perlBracketsDQ,@perlInterpDQ keepend246syn region perlBracesDQ		start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend247syn region perlAnglesDQ		start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend248 249 250" Simple version of searches and matches251syn match  perlMatchModifiers "[msixpadluncgo]\+" contained252syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+ contains=@perlInterpMatch keepend extend nextgroup=perlMatchModifiers253syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#+ contains=@perlInterpMatch keepend extend nextgroup=perlMatchModifiers254syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'+ contains=@perlInterpSQ keepend extend nextgroup=perlMatchModifiers255syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/+ contains=@perlInterpSlash keepend extend nextgroup=perlMatchModifiers256syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ keepend extend nextgroup=perlMatchModifiers257syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ extend nextgroup=perlMatchModifiers258syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ keepend extend nextgroup=perlMatchModifiers259syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ keepend extend nextgroup=perlMatchModifiers260 261" Below some hacks to recognise the // variant. This is virtually impossible to catch in all262" cases as the / is used in so many other ways, but these should be the most obvious ones.263syn 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=+/+ contains=@perlInterpSlash extend nextgroup=perlMatchModifiers264 265 266" Substitutions267" perlMatch is the first part, perlSubstitution* is the substitution part268syn match  perlSubstitutionModifiers "[msixpadluncgero]\+" contained269syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend270syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+  end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend extend271syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+  end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend extend272syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+  end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend273syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend274syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend275syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend276syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend277syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1+ keepend contained contains=@perlInterpDQ extend nextgroup=perlSubstitutionModifiers278syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+(+ end=+)+ contained contains=@perlInterpDQ,perlParensDQ keepend extend nextgroup=perlSubstitutionModifiers279syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\]+ contained contains=@perlInterpDQ,perlBracketsDQ keepend extend nextgroup=perlSubstitutionModifiers280syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+{+ end=+}+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend extend nextgroup=perlSubstitutionModifiers281syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+<+ end=+>+ contained contains=@perlInterpDQ,perlAnglesDQ keepend extend nextgroup=perlSubstitutionModifiers282syn region perlSubstitutionSQ		matchgroup=perlMatchStartEnd start=+'+  end=+'+ contained contains=@perlInterpSQ keepend extend nextgroup=perlSubstitutionModifiers283 284" Translations285" perlMatch is the first part, perlTranslation* is the second, translator part.286syn match  perlTranslationModifiers "[cdsr]\+" contained287syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ288syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ289syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl290syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl291syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl292syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl293syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1+ contained nextgroup=perlTranslationModifiers294syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+(+ end=+)+ contains=perlParensSQ contained nextgroup=perlTranslationModifiers295syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\]+ contains=perlBracketsSQ contained nextgroup=perlTranslationModifiers296syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+{+ end=+}+ contains=perlBracesSQ contained nextgroup=perlTranslationModifiers297syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+<+ end=+>+ contains=perlAnglesSQ contained nextgroup=perlTranslationModifiers298 299 300" Strings and q, qq, qw and qr expressions301 302syn region perlStringUnexpanded	matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend extend303syn region perlString		matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ keepend extend304syn region perlQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend305syn region perlQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend extend306syn region perlQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend307syn region perlQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend308syn region perlQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend309syn region perlQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend310 311syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend extend312syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend extend313syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend extend314syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend extend315syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend extend316syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend extend317 318syn region perlQW		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+  end=+\z1+ contains=@perlInterpSQ keepend extend319syn region perlQW		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+  end=+#+ contains=@perlInterpSQ keepend extend320syn region perlQW		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+  end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend321syn region perlQW		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+  end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend322syn region perlQW		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+  end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend323syn region perlQW		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+  end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend324 325syn match  perlQRModifiers "[msixpadluno]\+" contained326syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+  end=+\z1+ contains=@perlInterpMatch keepend extend nextgroup=perlQRModifiers327syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+  end=+/+ contains=@perlInterpSlash keepend extend nextgroup=perlQRModifiers328syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+  end=+#+ contains=@perlInterpMatch keepend extend nextgroup=perlQRModifiers329syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+  end=+'+ contains=@perlInterpSQ keepend extend nextgroup=perlQRModifiers330syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+  end=+)+ contains=@perlInterpMatch,perlParensDQ keepend extend nextgroup=perlQRModifiers331 332" A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern333syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+  end=+}+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend nextgroup=perlQRModifiers334syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+  end=+>+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend nextgroup=perlQRModifiers335syn region perlQR		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+  end=+\]+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend nextgroup=perlQRModifiers336 337" Constructs such as print <<EOF [...] EOF, 'here' documents338"339" XXX Any statements after the identifier are in perlString colour (i.e.340" 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it341" seems due to the 'auto-extending nature' of regions.342" XXX Indented heredocs are not perfect - they sometimes seem to take a moment343"     to update if switched from double to single quotes and vice versa.344"345" Note: bare delimiters such as << to mean <<"" are not supported. These are a346"       fatal error since 5.28 and, apparently, a rarely used feature.347 348syn region perlHereDocStart	matchgroup=perlStringStartEnd start=+<<\~\=\I\i*+                         end=+$+     contains=@perlTop oneline349syn region perlHereDocStart	matchgroup=perlStringStartEnd start=+<<\~\=\\\I\i*+                       end=+$+     contains=@perlTop oneline350syn region perlHereDocStart	matchgroup=perlStringStartEnd start=+<<\~\=\s*"[^\\"]*\%(\\.[^\\"]*\)*"+  end=+$+     contains=@perlTop oneline351syn region perlHereDocStart	matchgroup=perlStringStartEnd start=+<<\~\=\s*'[^\\']*\%(\\.[^\\']*\)*'+  end=+$+     contains=@perlTop oneline352syn region perlHereDocStart	matchgroup=perlStringStartEnd start=+<<\~\=\s*`[^\\`]*\%(\\.[^\\`]*\)*`+  end=+$+     contains=@perlTop oneline353syn region perlHereDocStart	matchgroup=perlStringStartEnd start=+<<\~\=\s*""+                         end=+$+     contains=@perlTop oneline354syn region perlHereDocStart	matchgroup=perlStringStartEnd start=+<<\~\=\s*''+                         end=+$+     contains=@perlTop oneline355syn region perlHereDocStart	matchgroup=perlStringStartEnd start=+<<\~\=\s*``+                         end=+$+     contains=@perlTop oneline356 357if get(g:, 'perl_fold', 0)358  syn region perlHereDoc	start=+<<\z(\I\i*\)+                        matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend359  syn region perlHereDoc	start=+<<\\\z(\I\i*\)+                      matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ fold extend360  syn region perlHereDoc	start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend361  syn region perlHereDoc	start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ fold extend362  syn region perlHereDoc	start=+<<\s*`\z([^\\`]*\%(\\.[^\\`]*\)*\)`+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend363  syn region perlHereDoc	start=+<<\s*""+                             matchgroup=perlStringStartEnd end=+^$+    contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend364  syn region perlHereDoc	start=+<<\s*''+                             matchgroup=perlStringStartEnd end=+^$+    contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine fold extend365  syn region perlHereDoc	start=+<<\s*``+                             matchgroup=perlStringStartEnd end=+^$+    contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend366else367  syn region perlHereDoc	start=+<<\z(\I\i*\)+                        matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ368  syn region perlHereDoc	start=+<<\\\z(\I\i*\)+                      matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ369  syn region perlHereDoc	start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ370  syn region perlHereDoc	start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ371  syn region perlHereDoc	start=+<<\s*`\z([^\\`]*\%(\\.[^\\`]*\)*\)`+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ372  syn region perlHereDoc	start=+<<\s*""+                             matchgroup=perlStringStartEnd end=+^$+    contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine373  syn region perlHereDoc	start=+<<\s*''+                             matchgroup=perlStringStartEnd end=+^$+    contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine374  syn region perlHereDoc	start=+<<\s*``+                             matchgroup=perlStringStartEnd end=+^$+    contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine375endif376 377if get(g:, 'perl_fold', 0)378  syn region perlIndentedHereDoc	start=+<<\~\z(\I\i*\)+                        matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpDQ fold extend379  syn region perlIndentedHereDoc	start=+<<\~\\\z(\I\i*\)+                      matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpSQ fold extend380  syn region perlIndentedHereDoc	start=+<<\~\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpDQ fold extend381  syn region perlIndentedHereDoc	start=+<<\~\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpSQ fold extend382  syn region perlIndentedHereDoc	start=+<<\~\s*`\z([^\\`]*\%(\\.[^\\`]*\)*\)`+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpDQ fold extend383  syn region perlIndentedHereDoc	start=+<<\~\s*""+                             matchgroup=perlStringStartEnd end=+^$+       contains=perlIndentedHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend384  syn region perlIndentedHereDoc	start=+<<\~\s*''+                             matchgroup=perlStringStartEnd end=+^$+       contains=perlIndentedHereDocStart,@perlInterpSQ,perlNotEmptyLine fold extend385  syn region perlIndentedHereDoc	start=+<<\~\s*``+                             matchgroup=perlStringStartEnd end=+^$+       contains=perlIndentedHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend386else387  syn region perlIndentedHereDoc	start=+<<\~\z(\I\i*\)+                        matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpDQ388  syn region perlIndentedHereDoc	start=+<<\~\\\z(\I\i*\)+                      matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpSQ389  syn region perlIndentedHereDoc	start=+<<\~\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpDQ390  syn region perlIndentedHereDoc	start=+<<\~\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpSQ391  syn region perlIndentedHereDoc	start=+<<\~\s*`\z([^\\`]*\%(\\.[^\\`]*\)*\)`+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpDQ392  syn region perlIndentedHereDoc	start=+<<\~\s*""+                             matchgroup=perlStringStartEnd end=+^$+       contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine393  syn region perlIndentedHereDoc	start=+<<\~\s*''+                             matchgroup=perlStringStartEnd end=+^$+       contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine394  syn region perlIndentedHereDoc	start=+<<\~\s*``+                             matchgroup=perlStringStartEnd end=+^$+       contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine395endif396 397 398" Class declarations399"400syn match   perlPackageDecl		"\<package\s\+\%(\h\|::\)\%(\w\|::\)*" contains=perlStatementPackage401syn keyword perlStatementPackage	package contained402 403" Functions404if get(g:, "perl_sub_signatures", 0)405    syn match perlSubSignature "\s*([^)]*)" contained extend406else407    syn match perlSubPrototype "\s*([\\$@%&*\[\];]*)" contained extend408endif409syn match perlSubAttribute "\s*:\s*\h\w*\%(([^)]*)\|\)" contained extend410syn match perlSubName "\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\s*" contained extend411syn region perlSubDeclaration start="" end="[;{]" contains=perlSubName,perlSubPrototype,perlSubAttribute,perlSubSignature,perlComment contained transparent412syn match perlFunction "\<sub\>\_s*" nextgroup=perlSubDeclaration413 414" The => operator forces a bareword to the left of it to be interpreted as415" a string416syn match  perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="417 418" All other # are comments, except ^#!419syn match  perlComment		"#.*" contains=perlTodo,@Spell extend420syn match  perlSharpBang	"^#!.*"421 422" Formats423syn region perlFormat		matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain,perlVarPlain2424syn match  perlFormatName	"format\s\+\k\+\s*="lc=7,me=e-1 contained425syn match  perlFormatField	"[@^][|<>~]\+\%(\.\.\.\)\=" contained426syn match  perlFormatField	"[@^]#[#.]*" contained427syn match  perlFormatField	"@\*" contained428syn match  perlFormatField	"@[^A-Za-z_|<>~#*]"me=e-1 contained429syn match  perlFormatField	"@$" contained430 431" __END__ and __DATA__ clauses432 433" Vim excludes empty syn-region end lines from the fold region.  This is434" probably a bug and means a DATA section ending with an empty line does not435" have that final line included in the fold.436"437" As a workaround we exploit an unterminated syntax region here with an end438" pattern that will (probably) never match.  This forces all lines to be439" included in the fold region.  Of course, if it does match then there's440" nothing to work around as it is a non-empty line.441"442" This problem also exists with empty string delimited heredocs but there's no443" known workaround for that case.444if get(g:, 'perl_fold', 0)445  syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="VIM_PERL_EOF\%$" contains=@perlDATA fold446  syntax region perlEND  matchgroup=perlENDStart  start="^__END__$"  end="VIM_PERL_EOF\%$" contains=@perlDATA fold447else448  syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="\%$" contains=@perlDATA449  syntax region perlEND  matchgroup=perlENDStart  start="^__END__$"  end="\%$" contains=@perlDATA450endif451 452" TODO: generalise this to allow other filetypes453if get(g:, 'perl_highlight_data', 0)454  syn cluster perlDATA add=perlPOD455else456  syn cluster perlDATA remove=perlPOD457endif458 459"460" Folding461if get(g:, 'perl_fold', 0)462  " Note: this bit must come before the actual highlighting of the "package"463  " keyword, otherwise this will screw up Pod lines that match /^package/464  if !get(g:, 'perl_nofold_packages', 0)465    syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend466    syn region perlPackageFold start="^\z(\s*\)package\s*\S\+\s*{" end="^\z1}" transparent fold keepend467  endif468  if !get(g:, 'perl_nofold_subs', 0)469    if get(g:, "perl_fold_anonymous_subs", 0)470      " EXPLANATION:471      " \<sub\>                  - "sub" keyword472      " \_[^;{]*                 - any characters, including new line, but not ";" or "{", zero or more times473      " \%(([\\$@%&*\[\];]*)\)\= - prototype definition, \$@%&*[]; characters between (), zero or 1 times474      " \_[^;]*                  - any characters, including new line, but not ";" or "{", zero or more times475      " {                        - start subroutine block476      syn region perlSubFold start="\<sub\>\_[^;{]*\%(([\\$@%&*\[\];]*)\)\=\_[^;{]*{" end="}" transparent fold keepend extend477    else478      " EXPLANATION:479      " same, as above, but first non-space character after "sub" keyword must480      " be [A-Za-z_] 481      syn region perlSubFold start="\<sub\>\s*\h\_[^;{]*\%(([\\$@%&*\[\];]*)\)\=\_[^;]*{" end="}" transparent fold keepend extend482    endif483 484    syn region perlSubFold start="\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>\_s*{" end="}" transparent fold keepend485  endif486 487  if get(g:, 'perl_fold_blocks', 0)488    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 keepend489 490    " TODO this is works incorrectly491    syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend492  else493    if get(g:, 'perl_fold_do_blocks', 0)494      syn region perlDoBlockDeclaration start="" end="{" contains=perlComment contained transparent495      syn match perlOperator "\<do\>\_s*" nextgroup=perlDoBlockDeclaration496 497      syn region perlDoBlockFold start="\<do\>\_[^{]*{" end="}" transparent fold keepend extend498    endif499  endif500 501  syn sync fromstart502else503  " fromstart above seems to set minlines even if perl_fold is not set.504  syn sync minlines=0505endif506 507" NOTE: If you're linking new highlight groups to perlString, please also put508"       them into b:match_skip in ftplugin/perl.vim.509 510" The default highlighting.511hi def link perlSharpBang		PreProc512hi def link perlControl			PreProc513hi def link perlInclude			Include514hi def link perlSpecial			Special515hi def link perlString			String516hi def link perlCharacter		Character517hi def link perlNumber			Number518hi def link perlFloat			Float519hi def link perlType			Type520hi def link perlIdentifier		Identifier521hi def link perlLabel			Label522hi def link perlStatement		Statement523hi def link perlConditional		Conditional524hi def link perlRepeat			Repeat525hi def link perlOperator		Operator526hi def link perlFunction		Keyword527hi def link perlSubName			Function528hi def link perlSubPrototype		Type529hi def link perlSubSignature		Type530hi def link perlSubAttribute		PreProc531hi def link perlComment			Comment532hi def link perlTodo			Todo533if get(g:, 'perl_string_as_statement', 0)534  hi def link perlStringStartEnd	perlStatement535else536  hi def link perlStringStartEnd	perlString537endif538hi def link perlVStringV		perlStringStartEnd539hi def link perlList			perlStatement540hi def link perlMisc			perlStatement541hi def link perlVarPlain		perlIdentifier542hi def link perlVarPlain2		perlIdentifier543hi def link perlArrow			perlIdentifier544hi def link perlFiledescRead		perlIdentifier545hi def link perlFiledescStatement	perlIdentifier546hi def link perlVarSimpleMember		perlIdentifier547hi def link perlVarSimpleMemberName	perlString548hi def link perlVarNotInMatches		perlIdentifier549hi def link perlVarSlash		perlIdentifier550hi def link perlQ			perlString551hi def link perlQQ			perlString552hi def link perlQW			perlString553hi def link perlQR			perlString554hi def link perlMatchModifiers          perlMatchStartEnd555hi def link perlSubstitutionModifiers   perlMatchStartEnd556hi def link perlTranslationModifiers    perlMatchStartEnd557hi def link perlQRModifiers             perlStringStartEnd558hi def link perlHereDoc			perlString559hi def link perlIndentedHereDoc		perlString560hi def link perlStringUnexpanded	perlString561hi def link perlSubstitutionSQ		perlString562hi def link perlSubstitutionGQQ		perlString563hi def link perlTranslationGQ		perlString564hi def link perlMatch			perlString565hi def link perlMatchStartEnd		perlStatement566hi def link perlFormatName		perlIdentifier567hi def link perlFormatField		perlString568hi def link perlPackageDecl		perlType569hi def link perlStorageClass		perlType570hi def link perlPackageRef		perlType571hi def link perlStatementPackage	perlStatement572hi def link perlStatementStorage	perlStatement573hi def link perlStatementControl	perlStatement574hi def link perlStatementScalar		perlStatement575hi def link perlStatementRegexp		perlStatement576hi def link perlStatementNumeric	perlStatement577hi def link perlStatementList		perlStatement578hi def link perlStatementHash		perlStatement579hi def link perlStatementIOfunc		perlStatement580hi def link perlStatementFiledesc	perlStatement581hi def link perlStatementVector		perlStatement582hi def link perlStatementFiles		perlStatement583hi def link perlStatementFlow		perlStatement584hi def link perlStatementInclude	perlStatement585hi def link perlStatementProc		perlStatement586hi def link perlStatementSocket		perlStatement587hi def link perlStatementIPC		perlStatement588hi def link perlStatementNetwork	perlStatement589hi def link perlStatementPword		perlStatement590hi def link perlStatementTime		perlStatement591hi def link perlStatementMisc		perlStatement592hi def link perlStatementIndirObj	perlStatement593hi def link perlFunctionName		perlIdentifier594hi def link perlMethod			perlIdentifier595hi def link perlPostDeref		perlIdentifier596hi def link perlFunctionPRef		perlType597 598if !get(g:, 'perl_include_pod', 1)599  hi def link perlPOD		perlComment600endif601hi def link perlShellCommand		perlString602hi def link perlSpecialAscii		perlSpecial603hi def link perlSpecialDollar		perlSpecial604hi def link perlSpecialString		perlSpecial605hi def link perlSpecialStringU		perlSpecial606hi def link perlSpecialMatch		perlSpecial607hi def link perlEND			perlComment608hi def link perlENDStart		perlEND609hi def link perlDATA			perlComment610hi def link perlDATAStart		perlDATA611 612" NOTE: Due to a bug in Vim (or more likely, a misunderstanding on my part),613"	I had to remove the transparent property from the following regions614"	in order to get them to highlight correctly.  Feel free to remove615"	these and reinstate the transparent property if you know how.616hi def link perlParensSQ		perlString617hi def link perlBracketsSQ		perlString618hi def link perlBracesSQ		perlString619hi def link perlAnglesSQ		perlString620 621hi def link perlParensDQ		perlString622hi def link perlBracketsDQ		perlString623hi def link perlBracesDQ		perlString624hi def link perlAnglesDQ		perlString625 626hi def link perlSpecialStringU2	perlString627 628" Possible errors629hi def link perlNotEmptyLine		Error630hi def link perlElseIfError		Error631 632" Syncing to speed up processing633"634if !get(g:, 'perl_no_sync_on_sub', 0)635  syn sync match perlSync	grouphere NONE "^\s*\<package\s"636  syn sync match perlSync	grouphere NONE "^\s*\<sub\>"637  syn sync match perlSync	grouphere NONE "^}"638endif639 640if !get(g:, 'perl_no_sync_on_global_var', 0)641  syn sync match perlSync	grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{"642  syn sync match perlSync	grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*("643endif644 645if get(g:, 'perl_sync_dist', 0)646  execute "syn sync maxlines=" . perl_sync_dist647else648  syn sync maxlines=100649endif650 651syn sync match perlSyncPOD	grouphere perlPOD "^=pod"652syn sync match perlSyncPOD	grouphere perlPOD "^=head"653syn sync match perlSyncPOD	grouphere perlPOD "^=item"654syn sync match perlSyncPOD	grouphere NONE "^=cut"655 656let b:current_syntax = "perl"657 658let &cpo = s:cpo_save659unlet s:cpo_save660 661" XXX Change to sts=4:sw=4662" vim:ts=8:sts=2:sw=2:expandtab:ft=vim663 
codekingpro/portable-devtools · Team Ai