about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Unix/Type/_perl_builtin_funcs36
1 files changed, 19 insertions, 17 deletions
diff --git a/Completion/Unix/Type/_perl_builtin_funcs b/Completion/Unix/Type/_perl_builtin_funcs
index 65eebf9b1..1c01a0dd6 100644
--- a/Completion/Unix/Type/_perl_builtin_funcs
+++ b/Completion/Unix/Type/_perl_builtin_funcs
@@ -1,31 +1,33 @@
 #autoload
 #
-# _perl_builtin_funcs - zsh completion function
-#
-# Adam Spiers <adam@spiers.net>
-#
-# Calculate all built-in Perl functions.  The result is cached
+# Parses perlfunc(1) to get a list of perl functions. The result is cached
 # for future use.
-#
 
-if [[ ${+_perl_builtin_funcs} -eq 0 ]]; then
+if (( ! $+_perl_builtin_funcs )); then
   typeset -agU _perl_builtin_funcs
   local perlfunc
 
-  if [[ -n "${perlfunc:=$(man -w perlfunc 2>/dev/null; print -l ${^manpath}/man1/perlfunc.1(N) {/usr/man,/usr/share/man,/usr/local/man}/man1/perlfunc.1(N))}" ]]; then
-    _perl_builtin_funcs=( `perl -lne '
-                             $in_funcs++, next if /Alphabetical/;     \
-                             next unless $in_funcs;                   \
-                             if (/^\.Ip "(\w+)/) {                    \
-                               print $1 unless $func{$1}; $func{$1}++ \
-                             }' $=perlfunc`
-               )
+  if [[ -n "${perlfunc:=$(man -w perlfunc 2>/dev/null; print -l ${^manpath:-${(s.:.)$(manpath)}}/man1/perlfunc.1(|[zZ]|gz|bz2)(N) {/usr/man,/usr/share/man,/usr/local/man}/man1/perlfunc.1(|[zZ]|gz|bz2)(N))}" ]]; then
+    case $perlfunc in
+      *.bz2) perlfunc="bzip2 -cd $perlfunc" ;;
+      *[zZ]) perlfunc="gzip -cd $perlfunc" ;;
+      *) perlfunc="cat $perlfunc" ;;
+    esac
+    _perl_builtin_funcs=(
+      $($=perlfunc | perl -lne '
+      $in_funcs++, next if /Alphabetical/;
+      next unless $in_funcs;
+      if (/^\.I[pP] "(\w+)/) {
+        print $1 unless $func{$1}; $func{$1}++
+      }')
+    )
   else
-    echo "Couldn't find perlfunc man page; giving up."
+    _message "can't find perlfunc man page; giving up"
     return 1
   fi
 fi
 
 local expl
 
-_wanted functions expl 'Perl built-in functions' compadd -a _perl_builtin_funcs
+_wanted functions expl 'perl built-in function' compadd "$@" -a - \
+    _perl_builtin_funcs