Function: cperl-etags
cperl-etags is an interactive and byte-compiled function defined in
cperl-mode.el.gz.
Signature
(cperl-etags &optional ADD ALL FILES)
Documentation
Run etags with appropriate options for Perl files.
If optional argument ALL is recursive, will process Perl files
in subdirectories too.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/cperl-mode.el.gz
(goto-char (match-beginning 0)))))))) ; No body
(defun cperl-etags (&optional add all files) ;; NOT USED???
"Run etags with appropriate options for Perl files.
If optional argument ALL is `recursive', will process Perl files
in subdirectories too."
;; Apparently etags doesn't support UTF-8 encoded sources, and usage
;; of etags has been commented out in the menu since ... well,
;; forever. So, let's just stick to ASCII here. -- haj, 2021-09-14
(interactive)
(let ((cmd "etags")
(args `("-l" "none" "-r"
;; 1=fullname 2=package? 3=name 4=proto? 5=attrs? (VERY APPROX!)
,(concat
"/\\<" cperl-sub-regexp "[ \\t]+\\(\\([a-zA-Z0-9:_]*::\\)?\\([a-zA-Z0-9_]+\\)\\)[ \\t]*\\(([^()]*)[ \t]*\\)?\\([ \t]*:[^#{;]*\\)?\\([{#]\\|$\\)/\\3/")
"-r"
"/\\<package[ \\t]+\\(\\([a-zA-Z0-9:_]*::\\)?\\([a-zA-Z0-9_]+\\)\\)[ \\t]*\\([#;]\\|$\\)/\\1/"
"-r"
"/\\<\\(package\\)[ \\t]*;/\\1;/"))
res)
(if add (setq args (cons "-a" args)))
(or files (setq files (list buffer-file-name)))
(cond
((eq all 'recursive)
;;(error "Not implemented: recursive")
(setq args (append (list "-e"
"sub wanted {push @ARGV, $File::Find::name if /\\.[pP][Llm]$/}
use File::Find;
find(\\&wanted, '.');
exec @ARGV;"
cmd) args)
cmd "perl"))
(all
;;(error "Not implemented: all")
(setq args (append (list "-e"
"push @ARGV, <*.PL *.pl *.pm>;
exec @ARGV;"
cmd) args)
cmd "perl"))
(t
(setq args (append args files))))
(setq res (apply 'call-process cmd nil nil nil args))
(or (eq res 0)
(message "etags returned \"%s\"" res))))