1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
#compdef perl
typeset -A opt_args
_perl () {
_arguments -s \
'-0-[input record separator ($/)]:: :_perl_input_seps' \
'-a[autosplit mode with -n or -p (splits $_ into @F)]' \
'-C-[control some unicode features]: :_perl_unicode_flags' \
"-c[check syntax only (runs BEGIN and END blocks)]" \
'( -dt -d: -dt:)-d[run scripts under debugger]' \
'(-d -d: -dt:)-dt[run scripts under debugger (debugged code uses threads)]' \
'(-d -dt -dt:)-d\:-[run under control of a debugging/tracing module]:debugging/tracing module:_perl_modules --strip-prefix --perl-hierarchy=Devel' \
'(-d -dt -d: )-dt\:-[run under control of a debugging/tracing module (debugged coded uses threads)]:debugging/tracing module:_perl_modules --strip-prefix --perl-hierarchy=Devel' \
'-D-[set debugging flags]: :_perl_debugging_flags' \
'(1 -E)*-e+[run one line of program]:one line of program' \
'(1 -e)*-E+[like -e but enable all optional features]:one line of program' \
'-f[disable executing $Config{sitelib}/sitecustomize.pl at startup]' \
'-F-[split() pattern for autosplit (-a)]:split() pattern, // is optional' \
'-h[list help summary]' \
'-i-[edit <> files in place (make backup if extension supplied)]:backup file extension: ' \
'*-I-[specify @INC/#include directory (may be used more than once)]:include path:_files -/' \
'-l-[enable line ending processing, specifies line terminator]:: :_perl_output_seps' \
\*{-m,-M}"-[module.. executes \`use/no module...' before executing your script]:module:_perl_m_opt" \
"-n[assume 'while (<>) { ... }' loop around your script]" \
"-p[assume loop like -n but print line also like sed]" \
"-s[enable some switch parsing for switches after script name]" \
"-S[look for the script using PATH environment variable]" \
'( -T)-t[turn on taint checks but only issue warnings]' \
'(-t )-T[turn on taint checks]' \
"-u[dump core after parsing script]" \
"-U[allow unsafe operations]" \
"-v[print version, patchlevel and license]" \
"-V-[print perl configuration information]:configuration key:_perl_config_vars" \
'( -W -X)-w[turn warnings on for compilation of your script (recommended)]' \
"(-w -X)-W[enable all warnings (ignores 'no warnings')]" \
"(-w -W )-X[disable all warnings (ignores 'use warnings')]" \
'-x-[ignore text before #!perl line and optionally cd to directory]:directory to cd to:_files -/' \
'1:Perl script:_files -g "*.(p[ml]|PL|t)(-.)"' \
'*::args:= _perl_normal'
}
_perl_normal() {
local expl
if [[ -z "$opt_args[(I)-(e|E)]" ]]; then
shift words
(( CURRENT-- ))
fi
_normal && ret=0
}
_perl_m_opt () {
compset -P '-'
if compset -P 1 '*='; then
_message -e module-arguments 'module arguments, comma separated'
else
_perl_modules -S= -q
fi
}
_perl_input_seps() {
if [[ $#PREFIX -eq 1 && $PREFIX != [0-9a-zA-Z] ]]; then
# convert a non-octal or potential option character into octal representation
compadd -i "$IPREFIX" -U $(( [##8] ##$PREFIX ))
else
_describe -x -t separators "input record separator, $/ in octal or hex (\0, if no argument) [\n]" '(
0:paragraph\ mode
777:slurp\ whole\ input\ files
)' || _comp_mesg=yes
fi
}
_perl_output_seps() {
if [[ $#PREFIX -eq 1 && $PREFIX != [0-9a-zA-Z] ]]; then
# convert a non-octal or potential option character into octal representation
compadd -i "$IPREFIX" -U $(( [##8] ##$PREFIX ))
else
_message -e separators "output record separator, $\\ in octal or hex [$/]"
fi
}
_perl_config_vars () {
if (( ! $+_perl_config_vars )); then
_perl_config_vars=( $(perl -MConfig -e 'print join("\n", keys %Config);') )
fi
local add_colon='-P:'
compset -P '*:' && add_colon=''
local delimiter='\ '
(( compstate[quoting] )) && delimiter=' '
compset -P '* ' && compset -q
compadd "$expl[@]" $add_colon -S$delimiter -q -a _perl_config_vars
}
_perl_unicode_flags () {
_values -s '' 'unicode bitmask or flag' \
'(S)I[ 1 STDIN is assumed to be in UTF-8]' \
'(S)O[ 2 STDOUT will be in UTF-8]' \
'(S)E[ 4 STDERR will be in UTF-8]' \
'(I O E)S[ 7 I + O + E]' \
'(D)i[ 8 UTF-8 is the default PerlIO layer for input streams]' \
'(D)o[ 16 UTF-8 is the default PerlIO layer for output streams]' \
'(i o)D[ 24 i + o]' \
'A[ 32 the @ARGV elements are expected to be strings encoded in UTF-8]' \
'L[ 64 make "IOEioA" conditional on the locale environment variables]' \
'a[256 set ${^UTF8CACHE} to -1, used for debugging]' \
}
_perl_debugging_flags () {
_values -s '' 'debug flag or bitmask' \
'p[ 1 tokenizing and parsing (with v, display parse stack)]' \
's[ 2 stack snapshots (with v, display all stacks)]' \
'l[ 4 context (loop) stack processing]' \
't[ 8 trace execution]' \
'o[ 16 method and overload resolution]' \
'c[ 32 string/numeric conversions]' \
'P[ 64 print profiling info, source file input state]' \
'm[ 128 memory and SV allocation]' \
'f[ 256 format processing]' \
'r[ 512 regular expression parsing and execution]' \
'x[ 1024 syntax tree dump]' \
'u[ 2048 tainting checks]' \
'U[ 4096 unofficial, user hacking (reserved for private, unreleased use)]' \
'X[ 16384 scratchpad allocation]' \
'D[ 32768 cleaning up]' \
'S[ 66536 Op slab allocation]' \
'T[ 131072 tokenising]' \
'R[ 262144 include reference counts of dumped variables (e.g. when using -Ds)]' \
"J[ 524288 show s,t,P-debug (don't jump over) on opcodes within package DB]" \
'v[ 1048576 verbose: use in conjunction with other flags]' \
'C[ 2097152 copy-on-write]' \
'A[ 4194304 consistency checks on internal structures]' \
'q[ 8388608 quiet - currently only suppresses the "EXECUTING" message]' \
'M[ 16777216 trace smart match resolution]' \
'B[ 33554432 dump subroutine definitions, including special blocks like BEGIN]' \
'L[ 67108864 trace locale-related info]' \
'i[134217728 trace PerlIO layer processing]' \
'y[268435456 trace y///, tr/// compilation and execution]'
}
_perl "$@"
|