# Encoding: UTF-8 {comment: "\n\tTODO:\tInclude RegExp syntax\n", fileTypes: ["pl", "pm", "pod", "t", "PL"], firstLineMatch: "^#!.*\\bperl\\b", foldingStartMarker: /(?<_1>\/\*|(?<_2>\{|\[|\()\s*$)/, foldingStopMarker: /(?<_1>\*\/|^\s*(?<_2>\}|\]|\)))/, keyEquivalent: "^~P", name: "Perl", patterns: [{include: "#line_comment"}, {begin: /^=/, captures: {0 => {name: "punctuation.definition.comment.perl"}}, end: "^=cut", name: "comment.block.documentation.perl"}, {include: "#variable"}, {applyEndPatternLast: 1, begin: /\b(?=qr\s*[^\s\w])/, comment: "string.regexp.compile.perl", end: "((([egimosx]*)))(?=(\\s+\\S|\\s*[;\\,\\#\\{\\}\\)]|$))", endCaptures: {1 => {name: "string.regexp.compile.perl"}, 2 => {name: "punctuation.definition.string.perl"}, 3 => {name: "keyword.control.regexp-option.perl"}}, patterns: [{begin: /(?<_1>qr)\s*\{/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "\\}", name: "string.regexp.compile.nested_braces.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_braces_interpolated"}]}, {begin: /(?<_1>qr)\s*\[/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "\\]", name: "string.regexp.compile.nested_brackets.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_brackets_interpolated"}]}, {begin: /(?<_1>qr)\s* {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: ">", name: "string.regexp.compile.nested_ltgt.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_ltgt_interpolated"}]}, {begin: /(?<_1>qr)\s*\(/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "\\)", name: "string.regexp.compile.nested_parens.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_parens_interpolated"}]}, {begin: /(?<_1>qr)\s*\'/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "\\'", name: "string.regexp.compile.single-quote.perl", patterns: [{include: "#escaped_char"}]}, {begin: /(?<_1>qr)\s*(?<_2>[^\s\w\'\{\[\(\<])/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "\\2", name: "string.regexp.compile.simple-delimiter.perl", patterns: [{comment: "This is to prevent thinks like qr/foo$/ to treat $/ as a variable", match: /\$(?=[^\s\w\'\{\[\(\<])/, name: "keyword.control.anchor.perl"}, {include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_parens_interpolated"}]}]}, {applyEndPatternLast: 1, begin: /\b(?=(?s)(?<_2>\s+\S|\s*[;\,\#\{\}\(\)\[<]|$))/, comment: "string.regexp.replace.perl", end: "((([egimosx]*)))(?=(\\s+\\S|\\s*[;\\,\\#\\{\\}\\)\\]>]|$))", endCaptures: {1 => {name: "string.regexp.replace.perl"}, 2 => {name: "punctuation.definition.string.perl"}, 3 => {name: "keyword.control.regexp-option.perl"}}, patterns: [{begin: /(?<_1>s)\s*\{/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "\\}", name: "string.regexp.nested_braces.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_braces"}]}, {begin: /(?<_1>s)\s*\[/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "\\]", name: "string.regexp.nested_brackets.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_brackets"}]}, {begin: /(?<_1>s)\s* {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: ">", name: "string.regexp.nested_ltgt.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_ltgt"}]}, {begin: /(?<_1>s)\s*\(/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "\\)", name: "string.regexp.nested_parens.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_parens"}]}, {begin: /\{/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "\\}", name: "string.regexp.format.nested_braces.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_braces_interpolated"}]}, {begin: /\[/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "\\]", name: "string.regexp.format.nested_brackets.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_brackets_interpolated"}]}, {begin: / {name: "punctuation.definition.string.perl"}}, end: ">", name: "string.regexp.format.nested_ltgt.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_ltgt_interpolated"}]}, {begin: /\(/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "\\)", name: "string.regexp.format.nested_parens.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_parens_interpolated"}]}, {begin: /'/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "'", name: "string.regexp.format.single_quote.perl", patterns: [{match: /\\['\\]/, name: "constant.character.escape.perl"}]}, {begin: /(?<_1>[^\s\w\[(?<_2>{<;])/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "\\1", name: "string.regexp.format.simple_delimiter.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}, {match: /\s+/}]}, {begin: /\b(?=s(?<_1>[^\s\w\[(?<_2>{<]).*\k<_1>(?<_3>[egimos]*)(?<_4>[\}\)\;\,]|\s+))/, comment: "string.regexp.replaceXXX", end: "((([egimos]*)))(?=([\\}\\)\\;\\,]|\\s+|$))", endCaptures: {1 => {name: "string.regexp.replace.perl"}, 2 => {name: "punctuation.definition.string.perl"}, 3 => {name: "keyword.control.regexp-option.perl"}}, patterns: [{begin: /(?<_1>s\s*)(?<_2>[^\s\w\[(?<_3>{<])/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "(?=\\2)", name: "string.regexp.replaceXXX.simple_delimiter.perl", patterns: [{include: "#escaped_char"}]}, {begin: /'/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "'", name: "string.regexp.replaceXXX.format.single_quote.perl", patterns: [{match: /\\['\\]/, name: "constant.character.escape.perl.perl"}]}, {begin: /(?<_1>[^\s\w\[(?<_2>{<])/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "\\1", name: "string.regexp.replaceXXX.format.simple_delimiter.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}]}, {begin: /\b(?=(?[^\s\w\[(?<_2>{<]))/, comment: "string.regexp.replace.extended", end: "\\2((([egimos]*x[egimos]*)))\\b", endCaptures: {1 => {name: "string.regexp.replace.perl"}, 2 => {name: "punctuation.definition.string.perl"}, 3 => {name: "keyword.control.regexp-option.perl"}}, patterns: [{begin: /(?<_1>s)\s*(?<_2>.)/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "support.function.perl"}}, end: "(?=\\2)", name: "string.regexp.replace.extended.simple_delimiter.perl", patterns: [{include: "#escaped_char"}]}, {begin: /'/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "'(?=[egimos]*x[egimos]*)\\b", name: "string.regexp.replace.extended.simple_delimiter.perl", patterns: [{include: "#escaped_char"}]}, {begin: /(?<_1>.)/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "\\1(?=[egimos]*x[egimos]*)\\b", name: "string.regexp.replace.extended.simple_delimiter.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}]}, {match: /\b\w+\s*(?==>)/, name: "constant.other.key.perl"}, {match: /(?<={)\s*\w+\s*(?=})/, name: "constant.other.bareword.perl"}, {captures: {1 => {name: "punctuation.definition.string.perl"}, 5 => {name: "punctuation.definition.string.perl"}}, match: /(?(?<_2>~\s*)?\/)(?<_3>\S.*?)(?\\{2})*(?<_5>\/)/, name: "string.regexp.find.perl"}, {begin: /(?\~\s*\/)/, captures: {0 => {name: "punctuation.definition.string.perl"}}, end: "\\/([cgimos]*x[cgimos]*)\\b", endCaptures: {1 => {name: "keyword.control.regexp-option.perl"}}, name: "string.regexp.find.extended.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}, {captures: {1 => {name: "keyword.control.perl"}, 2 => {name: "entity.name.type.class.perl"}, 3 => {name: "comment.line.number-sign.perl"}, 4 => {name: "punctuation.definition.comment.perl"}}, match: /^\s*(?<_1>package)\s+(?<_2>\S+)\s*(?<_3>(?<_4>#).*)?$\n?/, name: "meta.class.perl"}, {captures: {1 => {name: "storage.type.sub.perl"}, 2 => {name: "entity.name.function.perl"}, 3 => {name: "storage.type.method.perl"}}, match: /^\s*(?<_1>sub)\s+(?<_2>[-a-zA-Z0-9_]+)\s*(?<_3>\([\$\@\*;]*\))?/, name: "meta.function.perl"}, {captures: {1 => {name: "entity.name.function.perl"}, 2 => {name: "punctuation.definition.parameters.perl"}, 3 => {name: "variable.parameter.function.perl"}}, match: /^\s*(?<_1>BEGIN|END|DESTROY)\b/, name: "meta.function.perl"}, {begin: /^(?=(?<_1>\t| {4}))/, end: "(?=[^\\t\\s])", name: "meta.leading-tabs", patterns: [{captures: {1 => {name: "meta.odd-tab"}, 2 => {name: "meta.even-tab"}}, match: /(?<_1>\t| {4})(?<_2>\t| {4})?/}]}, {captures: {1 => {name: "support.function.perl"}, 2 => {name: "punctuation.definition.string.perl"}, 5 => {name: "punctuation.definition.string.perl"}}, match: /\b(?<_1>m)\s*(?[^\[\{\(A-Za-z0-9\s])(?<_3>.*?)(?\\{2})*(?<_5>\k<_2>)/, name: "string.regexp.find-m.perl"}, {begin: /\b(?<_1>m)\s*(? {name: "punctuation.definition.string.begin.perl"}}, end: "\\)", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.regexp.find-m-paren.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_parens_interpolated"}, {include: "#variable"}]}, {begin: /\b(?<_1>m)\s*(? {name: "punctuation.definition.string.begin.perl"}}, end: "\\}", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.regexp.find-m-brace.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_braces_interpolated"}, {include: "#variable"}]}, {begin: /\b(?<_1>m)\s*(? {name: "punctuation.definition.string.begin.perl"}}, end: "\\]", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.regexp.find-m-bracket.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_brackets_interpolated"}, {include: "#variable"}]}, {begin: /\b(?<_1>m)\s*(? {name: "punctuation.definition.string.begin.perl"}}, end: "\\>", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.regexp.find-m-ltgt.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_ltgt_interpolated"}, {include: "#variable"}]}, {captures: {1 => {name: "support.function.perl"}, 2 => {name: "punctuation.definition.string.perl"}, 5 => {name: "punctuation.definition.string.perl"}, 8 => {name: "punctuation.definition.string.perl"}}, match: /\b(?<_1>s|tr|y)\s*(?<_2>[^A-Za-z0-9\s])(?<_3>.*?)(?\\{2})*(?<_5>\k<_2>)(?<_6>.*?)(?\\{2})*(?<_8>\k<_2>)/, name: "string.regexp.replace.perl"}, {match: /\b(?<_1>__FILE__|__LINE__|__PACKAGE__)\b/, name: "constant.language.perl"}, {match: /(?)\b(?<_1>continue|die|do|else|elsif|exit|for|foreach|goto|if|last|next|redo|return|select|unless|until|wait|while|switch|case|package|require|use|eval)\b/, name: "keyword.control.perl"}, {match: /\b(?<_1>my|our|local)\b/, name: "storage.modifier.perl"}, {match: /(?and|or|xor|as)\b/, name: "keyword.operator.logical.perl"}, {match: /(?<_1><=>| =>|->)/, name: "keyword.operator.comparison.perl"}, {begin: /(?<_1>(?<_2><<) *"HTML").*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.doublequote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.html.embedded.perl", end: "(^HTML$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "text.html.basic"}]}, {begin: /(?<_1>(?<_2><<) *"XML").*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.doublequote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.xml.embedded.perl", end: "(^XML$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "text.xml"}]}, {begin: /(?<_1>(?<_2><<) *"CSS").*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.doublequote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.css.embedded.perl", end: "(^CSS$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "source.css"}]}, {begin: /(?<_1>(?<_2><<) *"JAVASCRIPT").*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.doublequote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.js.embedded.perl", end: "(^JAVASCRIPT$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "source.js"}]}, {begin: /(?<_1>(?<_2><<) *"SQL").*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.doublequote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "source.sql.embedded.perl", end: "(^SQL$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "source.sql"}]}, {begin: /(?<_1>(?<_2><<) *"POSTSCRIPT").*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.doublequote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.postscript.embedded.perl", end: "(^POSTSCRIPT$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "source.postscript"}]}, {begin: /(?<_1>(?<_2><<) *"(?<_3>[^"]*)").*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.doublequote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "string.unquoted.heredoc.doublequote.perl", end: "(^\\3$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}, {begin: /(?<_1>(?<_2><<) *'HTML').*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.quote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.html.embedded.perl", end: "(^HTML$)", patterns: [{include: "text.html.basic"}]}, {begin: /(?<_1>(?<_2><<) *'XML').*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.quote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.xml.embedded.perl", end: "(^XML$)", patterns: [{include: "text.xml"}]}, {begin: /(?<_1>(?<_2><<) *'CSS').*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.quote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.css.embedded.perl", end: "(^CSS$)", patterns: [{include: "source.css"}]}, {begin: /(?<_1>(?<_2><<) *'JAVASCRIPT').*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.quote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.js.embedded.perl", end: "(^JAVASCRIPT$)", patterns: [{include: "source.js"}]}, {begin: /(?<_1>(?<_2><<) *'SQL').*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.quote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "source.sql.embedded.perl", end: "(^SQL$)", patterns: [{include: "source.sql"}]}, {begin: /(?<_1>(?<_2><<) *'POSTSCRIPT').*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.quote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "source.postscript.embedded.perl", end: "(^POSTSCRIPT)", patterns: [{include: "source.postscript"}]}, {begin: /(?<_1>(?<_2><<) *'(?<_3>[^']*)').*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.quote.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "string.unquoted.heredoc.quote.perl", end: "(^\\3$)"}, {begin: /(?<_1>(?<_2><<) *`(?<_3>[^`]*)`).*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.backtick.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "string.unquoted.heredoc.backtick.perl", end: "(^\\3$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}, {begin: /(?<_1>(?<_2><<) *HTML\b).*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.html.embedded.perl", end: "(^HTML$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "text.html.basic"}]}, {begin: /(?<_1>(?<_2><<) *XML\b).*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "text.xml.embedded.perl", end: "(^XML$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "text.xml"}]}, {begin: /(?<_1>(?<_2><<) *SQL\b).*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "source.sql.embedded.perl", end: "(^SQL$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "source.sql"}]}, {begin: /(?<_1>(?<_2><<) *POSTSCRIPT\b).*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "source.postscript.embedded.perl", end: "(^POSTSCRIPT)", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "source.postscript"}]}, {begin: /(?<_1>(?<_2><<) *(?<_3>(?![=\d\$ ])[^;,'"`\s)]*)).*\n?/, captures: {0 => {name: "punctuation.definition.string.perl"}, 1 => {name: "string.unquoted.heredoc.perl"}, 2 => {name: "punctuation.definition.heredoc.perl"}}, contentName: "string.unquoted.heredoc.perl", end: "(^\\3$)", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}, {begin: /\bqq\s*(?<_1>[^\(\{\[\<\w\s])/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\1", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.qq.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}, {begin: /\bqx\s*(?<_1>[^'\(\{\[\<\w\s])/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\1", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.interpolated.qx.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}, {begin: /\bqx\s*'/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "'", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.interpolated.qx.single-quote.perl", patterns: [{include: "#escaped_char"}]}, {begin: /"/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\"", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.double.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}, {begin: /\bqw?\s*(?<_1>[^\(\{\[\<\w\s])/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\1", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.q.perl", patterns: [{include: "#escaped_char"}]}, {begin: /'/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "'", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.single.perl", patterns: [{match: /\\['\\]/, name: "constant.character.escape.perl"}]}, {begin: /`/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "`", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.interpolated.perl", patterns: [{include: "#escaped_char"}, {include: "#variable"}]}, {begin: /\bqq\s*\(/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\)", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.qq-paren.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_parens_interpolated"}, {include: "#variable"}]}, {begin: /\bqq\s*\{/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\}", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.qq-brace.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_braces_interpolated"}, {include: "#variable"}]}, {begin: /\bqq\s*\[/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\]", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.qq-bracket.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_brackets_interpolated"}, {include: "#variable"}]}, {begin: /\bqq\s*\ {name: "punctuation.definition.string.begin.perl"}}, end: "\\>", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.qq-ltgt.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_ltgt_interpolated"}, {include: "#variable"}]}, {begin: /\bqx\s*\(/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\)", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.interpolated.qx-paren.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_parens_interpolated"}, {include: "#variable"}]}, {begin: /\bqx\s*\{/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\}", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.interpolated.qx-brace.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_braces_interpolated"}, {include: "#variable"}]}, {begin: /\bqx\s*\[/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\]", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.interpolated.qx-bracket.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_brackets_interpolated"}, {include: "#variable"}]}, {begin: /\bqx\s*\ {name: "punctuation.definition.string.begin.perl"}}, end: "\\>", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.interpolated.qx-ltgt.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_ltgt_interpolated"}, {include: "#variable"}]}, {begin: /\bqw?\s*\(/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\)", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.q-paren.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_parens"}]}, {begin: /\bqw?\s*\{/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\}", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.q-brace.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_braces"}]}, {begin: /\bqw?\s*\[/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "\\]", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.q-bracket.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_brackets"}]}, {begin: /\bqw?\s*\ {name: "punctuation.definition.string.begin.perl"}}, end: "\\>", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.quoted.other.q-ltgt.perl", patterns: [{include: "#escaped_char"}, {include: "#nested_ltgt"}]}, {begin: /^__\w+__/, beginCaptures: {0 => {name: "punctuation.definition.string.begin.perl"}}, end: "$", endCaptures: {0 => {name: "punctuation.definition.string.end.perl"}}, name: "string.unquoted.program-block.perl"}, {begin: /\b(?<_1>format)\s+(?<_2>[A-Za-z]+)\s*=/, beginCaptures: {1 => {name: "support.function.perl"}, 2 => {name: "entity.name.function.format.perl"}}, end: "^\\.\\s*$", name: "meta.format.perl", patterns: [{include: "#line_comment"}, {include: "#variable"}]}, {match: /\b(?<_1>ARGV|DATA|ENV|SIG|STDERR|STDIN|STDOUT|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|cmp|connect|cos|crypt|dbmclose|dbmopen|defined|delete|dump|each|endgrent|endhostent|endnetent|endprotoent|endpwent|endservent|eof|eq|eval|exec|exists|exp|fcntl|fileno|flock|fork|format|formline|ge|getc|getgrent|getgrgid|getgrnam|gethostbyaddr|gethostbyname|gethostent|getlogin|getnetbyaddr|getnetbyname|getnetent|getpeername|getpgrp|getppid|getpriority|getprotobyname|getprotobynumber|getprotoent|getpwent|getpwnam|getpwuid|getservbyname|getservbyport|getservent|getsockname|getsockopt|glob|gmtime|grep|gt|hex|import|index|int|ioctl|join|keys|kill|lc|lcfirst|le|length|link|listen|local|localtime|log|lstat|lt|m|map|mkdir|msgctl|msgget|msgrcv|msgsnd|ne|no|oct|open|opendir|ord|pack|pipe|pop|pos|print|printf|push|q|qq|quotemeta|qw|qx|rand|read|readdir|readlink|recv|ref|rename|reset|reverse|rewinddir|rindex|rmdir|s|scalar|seek|seekdir|semctl|semget|semop|send|setgrent|sethostent|setnetent|setpgrp|setpriority|setprotoent|setpwent|setservent|setsockopt|shift|shmctl|shmget|shmread|shmwrite|shutdown|sin|sleep|socket|socketpair|sort|splice|split|sprintf|sqrt|srand|stat|study|substr|symlink|syscall|sysopen|sysread|system|syswrite|tell|telldir|tie|tied|time|times|tr|truncate|uc|ucfirst|umask|undef|unlink|unpack|unshift|untie|utime|values|vec|waitpid|wantarray|warn|write|y|q|qw|qq|qx)\b/, name: "support.function.perl"}], repository: {escaped_char: {match: /\\./, name: "constant.character.escape.perl"}, line_comment: {patterns: [{captures: {1 => {name: "comment.line.number-sign.perl"}, 2 => {name: "punctuation.definition.comment.perl"}}, match: /^(?<_1>(?<_2>#).*$\n?)/, name: "meta.comment.full-line.perl"}, {captures: {1 => {name: "punctuation.definition.comment.perl"}}, match: /(?<_1>#).*$\n?/, name: "comment.line.number-sign.perl"}]}, nested_braces: {begin: /\{/, captures: {1 => {name: "punctuation.section.scope.perl"}}, end: "\\}", patterns: [{include: "#escaped_char"}, {include: "#nested_braces"}]}, nested_braces_interpolated: {begin: /\{/, captures: {1 => {name: "punctuation.section.scope.perl"}}, end: "\\}", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_braces_interpolated"}]}, nested_brackets: {begin: /\[/, captures: {1 => {name: "punctuation.section.scope.perl"}}, end: "\\]", patterns: [{include: "#escaped_char"}, {include: "#nested_brackets"}]}, nested_brackets_interpolated: {begin: /\[/, captures: {1 => {name: "punctuation.section.scope.perl"}}, end: "\\]", patterns: [{include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_brackets_interpolated"}]}, nested_ltgt: {begin: / {name: "punctuation.section.scope.perl"}}, end: ">", patterns: [{include: "#nested_ltgt"}]}, nested_ltgt_interpolated: {begin: / {name: "punctuation.section.scope.perl"}}, end: ">", patterns: [{include: "#variable"}, {include: "#nested_ltgt_interpolated"}]}, nested_parens: {begin: /\(/, captures: {1 => {name: "punctuation.section.scope.perl"}}, end: "\\)", patterns: [{include: "#escaped_char"}, {include: "#nested_parens"}]}, nested_parens_interpolated: {begin: /\(/, captures: {1 => {name: "punctuation.section.scope.perl"}}, end: "\\)", patterns: [{comment: "This is to prevent thinks like qr/foo$/ to treat $/ as a variable", match: /\$(?=[^\s\w\'\{\[\(\<])/, name: "keyword.control.anchor.perl"}, {include: "#escaped_char"}, {include: "#variable"}, {include: "#nested_parens_interpolated"}]}, variable: {patterns: [{captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>\$)&(?![A-Za-z0-9_])/, name: "variable.other.regexp.match.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>\$)`(?![A-Za-z0-9_])/, name: "variable.other.regexp.pre-match.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>\$)'(?![A-Za-z0-9_])/, name: "variable.other.regexp.post-match.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>\$)\+(?![A-Za-z0-9_])/, name: "variable.other.regexp.last-paren-match.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>\$)"(?![A-Za-z0-9_])/, name: "variable.other.readwrite.list-separator.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>\$)0(?![A-Za-z0-9_])/, name: "variable.other.predefined.program-name.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>\$)[_ab\*\.\/\|,\\;#%=\-~^:?!\$<>\(\)\[\]@](?![A-Za-z0-9_])/, name: "variable.other.predefined.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>\$)[0-9]+(?![A-Za-z0-9_])/, name: "variable.other.subpattern.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>[\$\@\%](?<_2>#)?)(?<_3>[a-zA-Zx7f-xff\$]|::)(?<_4>[a-zA-Z0-9_x7f-xff\$]|::)*\b/, name: "variable.other.readwrite.global.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}, 2 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>\$\{)(?:[a-zA-Zx7f-xff\$]|::)(?:[a-zA-Z0-9_x7f-xff\$]|::)*(?<_2>\})/, name: "variable.other.readwrite.global.perl"}, {captures: {1 => {name: "punctuation.definition.variable.perl"}}, match: /(?<_1>[\$\@\%](?<_2>#)?)[0-9_]\b/, name: "variable.other.readwrite.global.special.perl"}]}}, scopeName: "source.perl", uuid: "EDBFE125-6B1C-11D9-9189-000D93589AF6"}