{ "information_for_contributors": [ "This file was originally converted from https://github.com/textmate/perl.tmbundle/blob/master/Syntaxes/Perl.plist", "It also includes a variety of fixes" ], "name": "Perl", "scopeName": "source.perl", "comment": "\n\tTODO:\tInclude RegExp syntax\n", "patterns": [ { "include": "#line_comment" }, { "begin": "^(?==[a-zA-Z]+)", "end": "^(=cut\\b.*$)", "endCaptures": { "1": { "patterns": [ { "include": "#pod" } ] } }, "name": "comment.block.documentation.perl", "patterns": [ { "include": "#pod" } ] }, { "include": "#variable" }, { "applyEndPatternLast": 1, "begin": "\\b(?=qr\\s*(?!=>)[^\\s\\w])", "comment": "string.regexp.compile.perl", "end": "((([egimosxradlupcn]*)))(?=(\\s+\\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": "(qr)\\s*\\{", "captures": { "0": { "name": "punctuation.definition.string.perl" }, "1": { "name": "support.function.perl" } }, "end": "\\}", "name": "string.regexp.compile.nested_braces.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_regex" }, { "include": "#interp_variable" }, { "include": "#nested_braces_interpolated" } ] }, { "begin": "(qr)\\s*\\[", "captures": { "0": { "name": "punctuation.definition.string.perl" }, "1": { "name": "support.function.perl" } }, "end": "\\]", "name": "string.regexp.compile.nested_brackets.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_regex" }, { "include": "#interp_variable" }, { "include": "#nested_brackets_interpolated" } ] }, { "begin": "(qr)\\s*<", "captures": { "0": { "name": "punctuation.definition.string.perl" }, "1": { "name": "support.function.perl" } }, "end": ">", "name": "string.regexp.compile.nested_ltgt.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_regex" }, { "include": "#interp_variable" }, { "include": "#nested_ltgt_interpolated" } ] }, { "begin": "(qr)\\s*\\(", "beginCaptures": { "0": { "name": "string.regexp.compile" }, "1": { "name": "support.function.perl" } }, "end": "\\)", "endCaptures": { "0": { "name": "string.regexp.compile.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_regex" }, { "include": "#interp_variable" }, { "include": "#nested_parens_interpolated_regex" }, { "match": ".", "name": "string.regexp.compile" } ] }, { "begin": "(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_regex" } ] }, { "begin": "(qr)\\s*(?!=>)([^\\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_regex" }, { "include": "#interp_variable" }, { "include": "#nested_parens_interpolated" } ] } ] }, { "applyEndPatternLast": 1, "begin": "(?)\\b(?=m\\s*[^\\sa-zA-Z0-9])", "comment": "string.regexp.find-m.perl", "end": "((([egimosxradlupcn]*)))(?=(\\s+\\S|\\s*[;\\,\\#\\{\\}\\)]|\\s*$))", "endCaptures": { "1": { "name": "string.regexp.find-m.perl" }, "2": { "name": "punctuation.definition.string.perl" }, "3": { "name": "keyword.control.regexp-option.perl" } }, "patterns": [ { "begin": "(m)\\s*\\{", "captures": { "0": { "name": "punctuation.definition.string.perl" }, "1": { "name": "support.function.perl" } }, "end": "\\}", "name": "string.regexp.find-m.nested_braces.perl", "patterns": [ { "comment": "This is to prevent thinks like qr/foo$/ to treat $/ as a variable", "match": "\\$(?=[\\(\\)\\|])", "name": "keyword.control.anchor.perl" }, { "include": "#escaped_char_regex" }, { "include": "#interp_variable" }, { "include": "#nested_braces_interpolated" } ] }, { "begin": "(m)\\s*\\[", "captures": { "0": { "name": "punctuation.definition.string.perl" }, "1": { "name": "support.function.perl" } }, "end": "\\]", "name": "string.regexp.find-m.nested_brackets.perl", "patterns": [ { "comment": "This is to prevent thinks like qr/foo$/ to treat $/ as a variable", "match": "\\$(?=[\\(\\)\\|])", "name": "keyword.control.anchor.perl" }, { "include": "#escaped_char_regex" }, { "include": "#interp_variable" }, { "include": "#nested_brackets_interpolated" } ] }, { "begin": "(m)\\s*<", "captures": { "0": { "name": "punctuation.definition.string.perl" }, "1": { "name": "support.function.perl" } }, "end": ">", "name": "string.regexp.find-m.nested_ltgt.perl", "patterns": [ { "comment": "This is to prevent thinks like qr/foo$/ to treat $/ as a variable", "match": "\\$(?=[\\(\\)\\|])", "name": "keyword.control.anchor.perl" }, { "include": "#escaped_char_regex" }, { "include": "#interp_variable" }, { "include": "#nested_ltgt_interpolated" } ] }, { "begin": "(m)\\s*\\(", "captures": { "0": { "name": "punctuation.definition.string.perl" }, "1": { "name": "support.function.perl" } }, "end": "\\)", "name": "string.regexp.find-m.nested_parens.perl", "patterns": [ { "comment": "This is to prevent thinks like qr/foo$/ to treat $/ as a variable", "match": "\\$(?=[\\(\\)\\|])", "name": "keyword.control.anchor.perl" }, { "include": "#escaped_char_regex" }, { "include": "#interp_variable" }, { "include": "#nested_parens_interpolated" } ] }, { "begin": "(m)\\s*'", "captures": { "0": { "name": "punctuation.definition.string.perl" }, "1": { "name": "support.function.perl" } }, "end": "'", "name": "string.regexp.find-m.single-quote.perl", "patterns": [ { "include": "#escaped_char_regex" } ] }, { "begin": "\\G(?)(m)(?!_)\\s*([^\\sa-zA-Z0-9'\\{\\[\\(\\<])", "captures": { "0": { "name": "string.regexp.find-m.other.perl" }, "1": { "name": "support.function.perl" } }, "end": "\\2", "patterns": [ { "comment": "This is to prevent thinks like qr/foo$/ to treat $/ as a variable", "match": "\\$(?=[^\\sa-zA-Z0-9'\\{\\[\\<])", "name": "keyword.control.anchor.perl" }, { "include": "#escaped_char_regex" }, { "include": "#interp_variable" }, { "begin": "\\[", "beginCaptures": { "1": { "name": "string.regexp.find-m.character-class.begin.perl" } }, "end": "\\]", "endCaptures": { "1": { "name": "string.regexp.find-m.character-class.end.perl" } }, "name": "string.regexp.find-m.character-class.set.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_regex" }, { "include": "#interp_variable" } ] }, { "include": "#nested_parens_interpolated_regex" }, { "match": ".", "name": "string.regexp.find-m.other.perl" } ] } ] }, { "applyEndPatternLast": 1, "begin": "\\b(?=(?)(s)(\\s+\\S|\\s*[;\\,\\{\\}\\(\\)\\[<]|$))", "comment": "string.regexp.replace.perl", "end": "(?<=[^\\s\\w\\[({<;])((([egimosxradlupcn]*)))(?=(\\s+\\S|\\s*[;\\,\\{\\}\\)\\]>]|\\s*$))", "endCaptures": { "1": { "name": "string.regexp.replace.perl" }, "2": { "name": "punctuation.definition.string.perl" }, "3": { "name": "keyword.control.regexp-option.perlTEST" } }, "patterns": [ { "begin": "(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_regex" }, { "include": "#nested_braces" } ] }, { "begin": "(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_regex" }, { "include": "#nested_brackets" } ] }, { "begin": "(s)\\s*<", "captures": { "0": { "name": "punctuation.definition.string.perl" }, "1": { "name": "support.function.perl" } }, "end": ">", "name": "string.regexp.nested_ltgt.perl", "patterns": [ { "include": "#escaped_char_regex" }, { "include": "#nested_ltgt" } ] }, { "begin": "(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_regex" }, { "include": "#nested_parens" } ] }, { "begin": "\\{", "captures": { "0": { "name": "punctuation.definition.string.perl" } }, "end": "\\}", "name": "string.regexp.format.nested_braces.perl", "patterns": [ { "include": "#escaped_char_regex" }, { "include": "#interp_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_regex" }, { "include": "#interp_variable" }, { "include": "#nested_brackets_interpolated" } ] }, { "begin": "<", "captures": { "0": { "name": "punctuation.definition.string.perl" } }, "end": ">", "name": "string.regexp.format.nested_ltgt.perl", "patterns": [ { "include": "#escaped_char_regex" }, { "include": "#interp_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_regex" }, { "include": "#interp_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": "([^\\s\\w\\[({<;\\$])", "captures": { "0": { "name": "punctuation.definition.string.perl" } }, "end": "\\1", "name": "string.regexp.format.simple_delimiter.perl", "patterns": [ { "include": "#escaped_char_regex" }, { "include": "#interp_variable" } ] }, { "comment": "This is intended to match the space between the two 'sections', such as s{foo} {bar}", "match": "(?<=[^\\s\\w\\[({<;\\$])\\s+(?=[^\\s\\w\\])}>;\\$])" } ] }, { "begin": "(?)\\b(?=s([^\\sa-zA-Z0-9\\[({<]).*\\1([egimosxradlupcn]*)([\\}\\)\\;\\,\\.]|\\s+))", "comment": "string.regexp.replaceXXX", "end": "((([egimosxradlupcn]*)))(?=([\\}\\)\\;\\,\\.]|\\s+|\\s*$))", "endCaptures": { "1": { "name": "string.regexp.replace.perl" }, "2": { "name": "punctuation.definition.string.perl" }, "3": { "name": "keyword.control.regexp-option.perl" } }, "patterns": [ { "begin": "(?)(s\\s*)([^\\sa-zA-Z0-9\\[({<])", "captures": { "0": { "name": "string.regexp.replaceXXX.start.perl" }, "1": { "name": "support.function.perl" } }, "end": "(?=\\2)", "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_regex" }, { "include": "#interp_variable" }, { "match": ".", "name": "string.regexp.replaceXXX.other.perl" } ] }, { "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": "([^\\sa-zA-Z0-9\\[({<])", "captures": { "0": { "name": "string.regexp.replaceXXX.end.perl" } }, "end": "\\1", "patterns": [ { "include": "#escaped_char_regex" }, { "include": "#interp_variable" }, { "match": ".", "name": "string.regexp.replaceXXX.other.perl" } ] } ] }, { "begin": "\\b(?=(?)s\\s*([^\\s\\w\\[({<>]))", "comment": "string.regexp.replace.extended", "end": "((([egimosradlupc]*x[egimosradlupc]*)))\\b", "endCaptures": { "1": { "name": "string.regexp.replace.perl" }, "2": { "name": "punctuation.definition.string.perl" }, "3": { "name": "keyword.control.regexp-option.perl" } }, "patterns": [ { "begin": "(s)\\s*(.)", "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_regex" } ] }, { "begin": "'", "captures": { "0": { "name": "punctuation.definition.string.perl" } }, "end": "'(?=[egimosradlupc]*x[egimosradlupc]*)\\b", "name": "string.regexp.replace.extended.simple_delimiter.perl", "patterns": [ { "include": "#escaped_char_regex" } ] }, { "begin": "(.)", "captures": { "0": { "name": "punctuation.definition.string.perl" } }, "end": "\\1(?=[egimosradlupc]*x[egimosradlupc]*)\\b", "name": "string.regexp.replace.extended.simple_delimiter.perl", "patterns": [ { "include": "#escaped_char_regex" }, { "include": "#interp_variable" } ] } ] }, { "comment": "Finds bare // regex while avoiding //= operator. Following a newline, an empty // is assumed to be the defined-or operator.", "begin": "(?<=\\(|=|!|\\{|~|&|\\||\\bif|\\bunless|\\band|\\bor|\\bsplit|\\bgrep)\\s*((\\/))(?!\\/=)|(?<=^)\\s*((\\/))(?!\\/)", "beginCaptures": { "1": { "name": "string.regexp.find.perl" }, "2": { "name": "punctuation.definition.string.perl" }, "3": { "name": "string.regexp.find.perl" }, "4": { "name": "punctuation.definition.string.perl" } }, "end": "((\\/([egimosxradlupcn]*)))(?=(\\s+\\S|\\s*[;\\,\\#\\{\\}\\)\\.]|\\s*$))", "endCaptures": { "1": { "name": "string.regexp.find.perl" }, "2": { "name": "punctuation.definition.string.perl" }, "3": { "name": "keyword.control.regexp-option.perl" } }, "patterns": [ { "comment": "This is to prevent thinks like /foo$/ to treat $/ as a variable", "match": "\\$(?=[\\(\\)\\/\\|])", "name": "keyword.control.anchor.perl" }, { "include": "#escaped_char_regex" }, { "include": "#interp_variable" }, { "match": ".", "name": "string.regexp.find.other.perl" } ] }, { "captures": { "1": { "name": "constant.other.key.perl" } }, "match": "\\b(\\w+)\\s*(?==>)" }, { "match": "(?<={)\\s*\\w+\\s*(?=})", "name": "constant.other.bareword.perl" }, { "captures": { "1": { "name": "keyword.control.perl" }, "2": { "name": "entity.name.type.class.perl" } }, "match": "^\\s*(package)\\s+([^\\s;#]+)", "name": "meta.class.perl" }, { "captures": { "1": { "name": "storage.type.sub.perl" }, "2": { "name": "entity.name.function.perl" }, "3": { "name": "storage.type.method.perl" } }, "match": "\\b(sub)(?:\\s+([-a-zA-Z0-9_]+))?\\s*(?:\\([\\$\\@\\*%&;\\s+]*\\)|\\b)", "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*(BEGIN|UNITCHECK|CHECK|INIT|END|DESTROY)\\b", "name": "meta.function.perl" }, { "begin": "^(?=(\\t| {4}))", "end": "(?=[^\\t\\s])", "name": "meta.leading-tabs", "patterns": [ { "captures": { "1": { "name": "meta.odd-tab" }, "2": { "name": "meta.even-tab" } }, "match": "(\\t| {4})(\\t| {4})?" } ] }, { "captures": { "1": { "name": "support.function.perl" }, "2": { "name": "string.tr.replace.perl" }, "3": { "name": "string.tr.replace.perl" }, "4": { "name": "string.tr.replace.perl" }, "5": { "name": "string.tr.replace.perl" }, "6": { "name": "string.tr.replace.perl" } }, "match": "\\b(tr|y)\\s*([^A-Za-z0-9\\s])(.*?)(?|::)\\b(continue|default|die|do|else|elsif|exit|for|foreach|given|goto|if|last|next|redo|return|select|unless|until|wait|when|while|require|use|eval|evalbytes|package)\\b", "name": "keyword.control.perl" }, { "match": "\\b(my|our|local)\\b", "name": "storage.modifier.perl" }, { "match": "(?|=>|->)", "name": "keyword.operator.comparison.perl" }, { "include": "#heredoc" }, { "begin": "\\bqq\\s*([^\\(\\{\\[\\<\\w\\s])", "beginCaptures": { "0": { "name": "string.quoted.qq.begin.perl" } }, "end": "\\1", "endCaptures": { "0": { "name": "string.quoted.qq.end.perl" } }, "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "match":".", "name": "string.quoted.other.qq.perl" } ] }, { "begin": "\\bqx\\s*([^'\\(\\{\\[\\<\\w\\s])", "beginCaptures": { "0": { "name": "string.quoted.qx.begin.perl" } }, "end": "\\1", "endCaptures": { "0": { "name": "string.quoted.qx.end.perl" } }, "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "match":".", "name": "string.quoted.other.qx.perl" } ] }, { "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": "string.quoted.double.perl" } }, "end": "\"", "endCaptures": { "0": { "name": "string.quoted.double.perl" } }, "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "match":".", "name": "string.quoted.double.perl" } ] }, { "begin": "(?)\\bqw?\\s*([^\\(\\{\\[\\<\\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" }, { "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": "#interp_variable" } ] }, { "begin": "(?)\\bqq\\s*\\(", "beginCaptures": { "0": { "name": "string.interpolated.qq.perl" } }, "end": "\\)", "endCaptures": { "0": { "name": "string.interpolated.qq.perl" } }, "patterns": [ { "include": "#escaped_char" }, { "include": "#nested_parens_interpolated_string" }, { "include": "#interp_variable" }, { "match": ".", "name": "string.interpolated.qq.perl" } ] }, { "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": "#interp_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": "#interp_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-ltgt.perl", "patterns": [ { "include": "#escaped_char" }, { "include": "#nested_ltgt_interpolated" }, { "include": "#interp_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_string" }, { "include": "#interp_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": "#interp_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": "#interp_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-ltgt.perl", "patterns": [ { "include": "#escaped_char" }, { "include": "#nested_ltgt_interpolated" }, { "include": "#interp_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": "#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": "#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": "#nested_brackets" } ] }, { "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-ltgt.perl", "patterns": [ { "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(format)\\s+(\\w+)\\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" } ] }, { "captures": { "1": { "name": "support.function.perl" }, "2": { "name": "entity.name.function.perl" } }, "match": "\\b(x)\\s*(\\d+)\\b" }, { "match": "(?|::)\\b(ARGV|DATA|ENV|SIG|STDERR|STDIN|STDOUT|abs|accept|alarm|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|exec|exists|exp|fc|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|localtime|lock|log|lstat|lt|m|map|mkdir|msgctl|msgget|msgrcv|msgsnd|ne|no|oct|open|opendir|ord|pack|pipe|pop|pos|print|printf|prototype|push|quotemeta|rand|read|readdir|readline|readlink|readpipe|recv|ref|rename|reset|reverse|rewinddir|rindex|rmdir|s|say|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|sysseek|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|x|y)\\b", "name": "support.function.perl" }, { "captures": { "1": { "name": "punctuation.section.scope.begin.perl" }, "2": { "name": "punctuation.section.scope.end.perl" } }, "comment": "Match empty brackets for ↩ snippet", "match": "(\\{)(\\})" }, { "captures": { "1": { "name": "punctuation.section.scope.begin.perl" }, "2": { "name": "punctuation.section.scope.end.perl" } }, "comment": "Match empty parenthesis for ↩ snippet", "match": "(\\()(\\))" } ], "repository": { "escaped_char": { "patterns": [ { "match": "\\\\\\d+", "name": "constant.character.escape.perl" }, { "match": "\\\\c[^\\s\\\\]", "name": "constant.character.escape.perl" }, { "match": "\\\\g(?:\\{(?:\\w*|-\\d+)\\}|\\d+)", "name": "constant.character.escape.perl" }, { "match": "\\\\k(?:\\{\\w*\\}|<\\w*>|'\\w*')", "name": "constant.character.escape.perl" }, { "match": "\\\\N\\{[^\\}]*\\}", "name": "constant.character.escape.perl" }, { "match": "\\\\o\\{\\d*\\}", "name": "constant.character.escape.perl" }, { "match": "\\\\(?:p|P)(?:\\{\\w*\\}|P)", "name": "constant.character.escape.perl" }, { "match": "\\\\x(?:[0-9a-zA-Z]{2}|\\{\\w*\\})?", "name": "constant.character.escape.perl" }, { "match": "\\\\.", "name": "constant.character.escape.perl" } ] }, "escaped_char_regex": { "patterns": [ { "match": "\\\\\\d+", "name": "constant.character.escape.regex.perl" }, { "match": "\\\\c[^\\s\\\\]", "name": "constant.character.escape.regex.perl" }, { "match": "\\\\g(?:\\{(?:\\w*|-\\d+)\\}|\\d+)", "name": "constant.character.escape.regex.perl" }, { "match": "\\\\k(?:\\{\\w*\\}|<\\w*>|'\\w*')", "name": "constant.character.escape.regex.perl" }, { "match": "\\\\N\\{[^\\}]*\\}", "name": "constant.character.escape.regex.perl" }, { "match": "\\\\o\\{\\d*\\}", "name": "constant.character.escape.regex.perl" }, { "match": "\\\\(?:p|P)(?:\\{\\w*\\}|P)", "name": "constant.character.escape.regex.perl" }, { "match": "\\\\x(?:[0-9a-zA-Z]{2}|\\{\\w*\\})?", "name": "constant.character.escape.regex.perl" }, { "match": "\\\\.", "name": "constant.character.escape.regex.perl" } ] }, "heredoc": { "patterns": [ { "begin": "((((<<(~)?) *')(HTML)(')))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.raw.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.raw.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.raw.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.html", "patterns": [ { "begin": "^", "end": "\\n", "name": "text.html.basic", "patterns": [ { "include": "text.html.basic" } ] } ] }, { "begin": "((((<<(~)?) *')(XML)(')))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.raw.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.raw.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.raw.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.xml", "patterns": [ { "begin": "^", "end": "\\n", "name": "text.xml", "patterns": [ { "include": "text.xml" } ] } ] }, { "begin": "((((<<(~)?) *')(CSS)(')))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.raw.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.raw.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.raw.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.css", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.css", "patterns": [ { "include": "source.css" } ] } ] }, { "begin": "((((<<(~)?) *')(JAVASCRIPT)(')))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.raw.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.raw.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.raw.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.js", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.js", "patterns": [ { "include": "source.js" } ] } ] }, { "begin": "((((<<(~)?) *')(SQL)(')))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.raw.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.raw.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.raw.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.sql", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.sql", "patterns": [ { "include": "source.sql" } ] } ] }, { "begin": "((((<<(~)?) *')(POSTSCRIPT)(')))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.raw.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.raw.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.raw.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.postscript", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.postscript", "patterns": [ { "include": "source.postscript" } ] } ] }, { "begin": "((((<<(~)?) *')([^']*)(')))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.raw.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.raw.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.raw.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } } }, { "begin": "((((<<(~)?) *\\\\)((?![=\\d\\$\\( ])[^;,'\"`\\s\\)]*)()))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.raw.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.raw.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.raw.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } } }, { "begin": "((((<<(~)?) *\")(HTML)(\")))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.html", "patterns": [ { "begin": "^", "end": "\\n", "name": "text.html.basic", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "text.html.basic" } ] } ] }, { "begin": "((((<<(~)?) *\")(XML)(\")))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.xml", "patterns": [ { "begin": "^", "end": "\\n", "name": "text.xml", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "text.xml" } ] } ] }, { "begin": "((((<<(~)?) *\")(CSS)(\")))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.css", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.css", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "source.css" } ] } ] }, { "begin": "((((<<(~)?) *\")(JAVASCRIPT)(\")))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.js", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.js", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "source.js" } ] } ] }, { "begin": "((((<<(~)?) *\")(SQL)(\")))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.sql", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.sql", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "source.sql" } ] } ] }, { "begin": "((((<<(~)?) *\")(POSTSCRIPT)(\")))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.postscript", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.postscript", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "source.postscript" } ] } ] }, { "begin": "((((<<(~)?) *\")([^\"]*)(\")))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" } ] }, { "begin": "((((<<(~)?) *)(HTML)()))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.html", "patterns": [ { "begin": "^", "end": "\\n", "name": "text.html.basic", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "text.html.basic" } ] } ] }, { "begin": "((((<<(~)?) *)(XML)()))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.xml", "patterns": [ { "begin": "^", "end": "\\n", "name": "text.xml", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "text.xml" } ] } ] }, { "begin": "((((<<(~)?) *)(CSS)()))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.css", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.css", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "source.css" } ] } ] }, { "begin": "((((<<(~)?) *)(JAVASCRIPT)()))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.js", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.js", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "source.js" } ] } ] }, { "begin": "((((<<(~)?) *)(SQL)()))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.sql", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.sql", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "source.sql" } ] } ] }, { "begin": "((((<<(~)?) *)(POSTSCRIPT)()))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "name": "meta.embedded.block.postscript", "patterns": [ { "begin": "^", "end": "\\n", "name": "source.postscript", "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" }, { "include": "source.postscript" } ] } ] }, { "begin": "((((<<(~)?))((?![=\\d\\$\\( ])[^;,'\"`\\s\\)]*)()))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.interpolated.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" } ] }, { "begin": "((((<<(~)?) *`)([^`]*)(`)))(.*)\\n?", "beginCaptures": { "1": { "name": "string.unquoted.heredoc.interpolated.perl" }, "2": { "name": "punctuation.definition.string.begin.perl" }, "3": { "name": "punctuation.definition.delimiter.begin.perl" }, "7": { "name": "punctuation.definition.delimiter.end.perl" }, "8": { "patterns": [ { "include": "$self" } ] } }, "contentName": "string.unquoted.heredoc.shell.perl", "end": "^((?!\\5)\\s+)?((\\6))$", "endCaptures": { "2": { "name": "string.unquoted.heredoc.interpolated.perl" }, "3": { "name": "punctuation.definition.string.end.perl" } }, "patterns": [ { "include": "#escaped_char" }, { "include": "#interp_variable" } ] } ] }, "line_comment": { "patterns": [ { "begin": "(^[ \\t]+)?(?=#)", "beginCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.perl" } }, "end": "(?!\\G)", "patterns": [ { "begin": "#", "beginCaptures": { "0": { "name": "punctuation.definition.comment.perl" } }, "end": "\\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": "#interp_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": "#interp_variable" }, { "include": "#nested_brackets_interpolated" } ] }, "nested_ltgt": { "begin": "<", "captures": { "1": { "name": "punctuation.section.scope.perl" } }, "end": ">", "patterns": [ { "include": "#nested_ltgt" } ] }, "nested_ltgt_interpolated": { "begin": "<", "captures": { "1": { "name": "punctuation.section.scope.perl" } }, "end": ">", "patterns": [ { "include": "#interp_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": "#interp_variable" }, { "include": "#nested_parens_interpolated" } ] }, "nested_parens_interpolated_regex": { "comment": "Same as nested_parens_interpolated, but character classes set to display as regex", "begin": "(\\()", "beginCaptures": { "1": { "name": "string.regexp.format.nested_parens.perl" } }, "end": "(\\))", "endCaptures": { "1": { "name": "string.regexp.format.nested_parens.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" }, { "comment": "Honestly, I don't think this is needed and it's not present in =~ // regexes without the m. If you remove character classes, also remove nested parens in non-paren based regexes", "begin": "\\[", "beginCaptures": { "1": { "name": "string.regexp.nested.character-class.begin.perl" } }, "end": "\\]", "endCaptures": { "1": { "name": "string.regexp.nested.character-class.end.perl" } }, "name": "string.regexp.nested.character-class.set.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": "#interp_variable" }, { "include": "#nested_parens_interpolated_regex" }, { "match": ".", "name": "string.regexp.format.nested_parens.perl" } ] }, "nested_parens_interpolated_string": { "comment": "Same as nested_parens_interpolated, but character classes set to display as string", "begin": "(\\()", "beginCaptures": { "1": { "name": "string.quoted.format.nested_parens.perl" } }, "end": "(\\))", "endCaptures": { "1": { "name": "string.quoted.format.nested_parens.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": "#interp_variable" }, { "include": "#nested_parens_interpolated_string" }, { "match": ".", "name": "string.quoted.format.nested_parens.perl" } ] }, "pod": { "patterns": [ { "match": "^=(pod|back|cut)\\b", "name": "storage.type.class.pod.perl" }, { "begin": "^(=begin)\\s+(html)\\s*$", "beginCaptures": { "1": { "name": "storage.type.class.pod.perl" }, "2": { "name": "variable.other.pod.perl" } }, "contentName": "text.embedded.html.basic", "end": "^(=end)\\s+(html)|^(?==cut)", "endCaptures": { "1": { "name": "storage.type.class.pod.perl" }, "2": { "name": "variable.other.pod.perl" } }, "name": "meta.embedded.pod.perl", "patterns": [ { "include": "text.html.basic" } ] }, { "captures": { "1": { "name": "storage.type.class.pod.perl" }, "2": { "name": "variable.other.pod.perl", "patterns": [ { "include": "#pod-formatting" } ] } }, "match": "^(=(?:head[1-4]|item|over|encoding|begin|end|for))\\b\\s*(.*)" }, { "include": "#pod-formatting" } ] }, "pod-formatting": { "patterns": [ { "captures": { "1": { "name": "markup.italic.pod.perl" }, "2": { "name": "markup.italic.pod.perl" } }, "match": "I(?:<([^<>]+)>|<+(\\s+(?:(?|[^>])+\\s+)>+)", "name": "entity.name.type.instance.pod.perl" }, { "captures": { "1": { "name": "markup.bold.pod.perl" }, "2": { "name": "markup.bold.pod.perl" } }, "match": "B(?:<([^<>]+)>|<+(\\s+(?:(?|[^>])+\\s+)>+)", "name": "entity.name.type.instance.pod.perl" }, { "captures": { "1": { "name": "markup.raw.pod.perl" }, "2": { "name": "markup.raw.pod.perl" } }, "match": "C(?:<([^<>]+)>|<+(\\\\s+(?:(?|[^>])+\\\\s+)>+)", "name": "entity.name.type.instance.pod.perl" }, { "captures": { "1": { "name": "markup.underline.link.hyperlink.pod.perl" } }, "match": "L<([^>]+)>", "name": "entity.name.type.instance.pod.perl" }, { "match": "[EFSXZ]<[^>]*>", "name": "entity.name.type.instance.pod.perl" } ] }, "variable": { "patterns": [ { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\%(#)?)([\\p{L}\\p{M}_\\$]|::)([\\p{L}\\p{M}_\\$]|::)*\\b", "name": "variable.other.readwrite.global.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\%(#)?)[0-9_]\\b", "name": "variable.other.readwrite.global.special.perl" }, { "include": "#interp_variable" } ] }, "interp_variable": { "patterns": [ { "captures": { "1": { "name": "variable.other.readwrite.global.perl" }, "2": { "name": "keyword.operator.comparison.perl" }, "3": { "name": "interpolated.punctuation.perl" }, "4": { "name": "constant.other.key.perl" }, "5": { "name": "interpolated.punctuation.perl" }, "6": { "name": "keyword.operator.comparison.perl" }, "7": { "name": "interpolated.punctuation.perl" }, "8": { "name": "constant.other.key.perl" }, "9": { "name": "interpolated.punctuation.perl" } }, "match": "(\\$[\\p{L}\\p{M}_\\$][\\p{L}\\p{M}0-9_\\$]*)((?:->)?)(\\{)([\\p{L}\\p{M}0-9_]+)(\\})((?:->)?)(\\{)([\\p{L}\\p{M}0-9_]+)(\\})" }, { "captures": { "1": { "name": "variable.other.readwrite.global.perl" }, "2": { "name": "keyword.operator.comparison.perl" }, "3": { "name": "interpolated.punctuation.perl" }, "4": { "name": "constant.other.key.perl" }, "5": { "name": "interpolated.punctuation.perl" } }, "match": "(\\$[\\p{L}\\p{M}_\\$][\\p{L}\\p{M}0-9_\\$]*)((?:->)?)(\\{)([\\p{L}\\p{M}0-9_]+)(\\})" }, { "captures": { "1": { "name": "variable.other.readwrite.global.perl" }, "2": { "name": "keyword.operator.comparison.perl" }, "3": { "name": "interpolated.punctuation.perl" }, "4": { "name": "variable.other.key.perl" }, "5": { "name": "interpolated.punctuation.perl" } }, "match": "(\\$[\\p{L}\\p{M}_\\$][\\p{L}\\p{M}0-9_\\$]*)((?:->)?)(\\{)(\\$[\\p{L}\\p{M}0-9_]+)(\\})" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\$)&(?![A-Za-z0-9_])", "name": "variable.other.regexp.match.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\$)`(?![A-Za-z0-9_])", "name": "variable.other.regexp.pre-match.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\$)'(?![A-Za-z0-9_])", "name": "variable.other.regexp.post-match.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\$)\\+(?![A-Za-z0-9_])", "name": "variable.other.regexp.last-paren-match.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\$)\"(?![A-Za-z0-9_])", "name": "variable.other.readwrite.list-separator.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\$)0(?![A-Za-z0-9_])", "name": "variable.other.predefined.program-name.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\$)[_ab\\*\\.\\/\\|,\\\\;#%=\\-~^:?!\\$<>\\(\\)\\[\\]@](?![A-Za-z0-9_])", "name": "variable.other.predefined.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\$)\\^[A-Z](?![A-Za-z0-9_])", "name": "variable.other.predefined.caret.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "(\\$)[0-9]+(?![A-Za-z0-9_])", "name": "variable.other.subpattern.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "([\\$\\@](#)?)([\\p{L}\\p{M}_\\$]|::)([\\p{L}\\p{M}0-9_\\$]|::)*\\b", "name": "variable.other.readwrite.global.perl" }, { "captures": { "1": { "name": "variable.other.predefined.perl" }, "2": { "name": "variable.other.predefined.perl" } }, "match": "(\\$\\{)(?:\\^?[\\p{L}\\p{M}_\\$]|::)(?:[\\p{L}\\p{M}0-9_\\$]|::)*(\\})", "name": "variable.other.readwrite.global.perl" }, { "captures": { "1": { "name": "punctuation.definition.variable.perl" } }, "match": "([\\$\\@](#)?)[0-9_]\\b", "name": "variable.other.readwrite.global.special.perl" }, { "begin": "[\\$\\@\\%\\&]\\{(?=[^{]*})", "beginCaptures": { "0": { "name": "variable.other.predefined.perl" } }, "contentName": "meta.embedded.block.perl", "end": "\\}", "endCaptures": { "0": { "name": "variable.other.predefined.perl" } }, "name": "variable.other.readwrite.global.perl", "patterns": [ { "include": "$self" } ] } ] } } }