{
    "aliases": [
        "pl",
        "pm"
    ],
    "lexemes": "[\\w\\.]+",
    "keywords": "getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",
    "contains": [
        {
            "variants": [
                {
                    "begin": "\\$\\d"
                },
                {
                    "begin": "[\\$%@](\\^\\w\\b|#\\w+(::\\w+)*|{\\w+}|\\w+(::\\w*)*)"
                },
                {
                    "begin": "[\\$%@][^\\s\\w{]",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "comment",
            "begin": "#",
            "end": "$",
            "contains": [
                {
                    "begin": "\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b"
                },
                {
                    "className": "doctag",
                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "comment",
            "begin": "^\\=\\w",
            "end": "\\=cut",
            "contains": [
                {
                    "$ref": "#contains.1.contains.0"
                },
                {
                    "className": "doctag",
                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                    "relevance": 0
                }
            ],
            "endsWithParent": true
        },
        {
            "begin": "->{",
            "end": "}",
            "contains": {
                "$ref": "#contains"
            }
        },
        {
            "className": "string",
            "contains": [
                {
                    "begin": "\\\\[\\s\\S]",
                    "relevance": 0
                },
                {
                    "className": "subst",
                    "begin": "[$@]\\{",
                    "end": "\\}",
                    "keywords": "getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",
                    "contains": {
                        "$ref": "#contains"
                    }
                },
                {
                    "$ref": "#contains.0"
                }
            ],
            "variants": [
                {
                    "begin": "q[qwxr]?\\s*\\(",
                    "end": "\\)",
                    "relevance": 5
                },
                {
                    "begin": "q[qwxr]?\\s*\\[",
                    "end": "\\]",
                    "relevance": 5
                },
                {
                    "begin": "q[qwxr]?\\s*\\{",
                    "end": "\\}",
                    "relevance": 5
                },
                {
                    "begin": "q[qwxr]?\\s*\\|",
                    "end": "\\|",
                    "relevance": 5
                },
                {
                    "begin": "q[qwxr]?\\s*\\<",
                    "end": "\\>",
                    "relevance": 5
                },
                {
                    "begin": "qw\\s+q",
                    "end": "q",
                    "relevance": 5
                },
                {
                    "begin": "'",
                    "end": "'",
                    "contains": [
                        {
                            "$ref": "#contains.4.contains.0"
                        }
                    ]
                },
                {
                    "begin": "\"",
                    "end": "\""
                },
                {
                    "begin": "`",
                    "end": "`",
                    "contains": [
                        {
                            "$ref": "#contains.4.contains.0"
                        }
                    ]
                },
                {
                    "begin": "{\\w+}",
                    "contains": [],
                    "relevance": 0
                },
                {
                    "begin": "-?\\w+\\s*\\=\\>",
                    "contains": [],
                    "relevance": 0
                }
            ]
        },
        {
            "className": "number",
            "begin": "(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",
            "relevance": 0
        },
        {
            "begin": "(\\\/\\\/|!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|\/=|\/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~|\\b(split|return|print|reverse|grep)\\b)\\s*",
            "keywords": "split return print reverse grep",
            "relevance": 0,
            "contains": [
                {
                    "$ref": "#contains.1"
                },
                {
                    "className": "regexp",
                    "begin": "(s|tr|y)\/(\\\\.|[^\/])*\/(\\\\.|[^\/])*\/[a-z]*",
                    "relevance": 10
                },
                {
                    "className": "regexp",
                    "begin": "(m|qr)?\/",
                    "end": "\/[a-z]*",
                    "contains": [
                        {
                            "$ref": "#contains.4.contains.0"
                        }
                    ],
                    "relevance": 0
                }
            ]
        },
        {
            "className": "function",
            "beginKeywords": "sub",
            "end": "(\\s*\\(.*?\\))?[;{]",
            "excludeEnd": true,
            "relevance": 5,
            "contains": [
                {
                    "className": "title",
                    "begin": "[a-zA-Z]\\w*",
                    "relevance": 0
                }
            ]
        },
        {
            "begin": "-\\w\\b",
            "relevance": 0
        },
        {
            "begin": "^__DATA__$",
            "end": "^__END__$",
            "subLanguage": "mojolicious",
            "contains": [
                {
                    "begin": "^@@.*",
                    "end": "$",
                    "className": "comment"
                }
            ]
        }
    ]
}
