about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Unix/Type/_perl_builtin_funcs30
2 files changed, 8 insertions, 27 deletions
diff --git a/ChangeLog b/ChangeLog
index 0e086a92e..bad67b4a0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-04-24  Oliver Kiddle  <opk@zsh.org>
+
+	* 18468: Completion/Unix/Type/_perl_builtin_funcs: follow Bart's
+	suggestion of using perldoc itself to retrieve the documentation
+
 2003-04-23  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
 
 	* 18467: Src/Zle/computil.c: null pointer dereferenced with
diff --git a/Completion/Unix/Type/_perl_builtin_funcs b/Completion/Unix/Type/_perl_builtin_funcs
index 1c01a0dd6..829a53e60 100644
--- a/Completion/Unix/Type/_perl_builtin_funcs
+++ b/Completion/Unix/Type/_perl_builtin_funcs
@@ -1,33 +1,9 @@
 #autoload
-#
-# Parses perlfunc(1) to get a list of perl functions. The result is cached
-# for future use.
-
-if (( ! $+_perl_builtin_funcs )); then
-  typeset -agU _perl_builtin_funcs
-  local 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
-    _message "can't find perlfunc man page; giving up"
-    return 1
-  fi
-fi
 
 local expl
 
+: ${(A)_perl_builtin_funcs:=${(u)${${(M)${(f)"$(_call_program functions \
+    perldoc -u perlfunc 2>/dev/null)"}:#\=item [a-z]*}#* }%%[^a-z]*}}
+
 _wanted functions expl 'perl built-in function' compadd "$@" -a - \
     _perl_builtin_funcs