Function: cperl-after-expr-p
cperl-after-expr-p is a byte-compiled function defined in
cperl-mode.el.gz.
Signature
(cperl-after-expr-p &optional LIM CHARS TEST)
Documentation
Return non-nil if the position is good for start of expression.
TEST is the expression to evaluate at the found position. If absent,
CHARS is a string that contains good characters to have before
us (however, } is treated "smartly" if it is not in the list). LIM
is the minimal position to use.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/cperl-mode.el.gz
(defun cperl-after-expr-p (&optional lim chars test)
"Return non-nil if the position is good for start of expression.
TEST is the expression to evaluate at the found position. If absent,
CHARS is a string that contains good characters to have before
us (however, `}' is treated \"smartly\" if it is not in the list). LIM
is the minimal position to use."
(let ((lim (or lim (point-min)))
stop p)
(cperl-update-syntaxification (point))
(save-excursion
(while (and (not stop) (> (point) lim))
(skip-chars-backward " \t\n\f" lim)
(setq p (point))
(beginning-of-line)
;;(memq (setq pr (get-text-property (point) 'syntax-type))
;; '(pod here-doc here-doc-delim))
(if (get-text-property (point) 'here-doc-group)
(progn
(goto-char
(cperl-beginning-of-property (point) 'here-doc-group))
(beginning-of-line 0)))
(if (get-text-property (point) 'in-pod)
(progn
(goto-char
(cperl-beginning-of-property (point) 'in-pod))
(beginning-of-line 0)))
(if (looking-at "^[ \t]*\\(#\\|$\\)") nil ; Only comment, skip
;; Else: last iteration, or a label
(cperl-to-comment-or-eol) ; Will not move past "." after a format
(skip-chars-backward " \t")
(if (< p (point)) (goto-char p))
(setq p (point))
(if (and (eq (preceding-char) ?:)
(progn
(forward-char -1)
(skip-chars-backward " \t\n\f" lim)
(memq (char-syntax (preceding-char)) '(?w ?_))))
(forward-sexp -1) ; Possibly label. Skip it
(goto-char p)
(setq stop t))))
(or (bobp) ; ???? Needed
(eq (point) lim)
(looking-at "[ \t]*__\\(END\\|DATA\\)__") ; After this anything goes
(progn
(if test (eval test)
(or (memq (preceding-char) (append (or chars "{;") nil))
(and (eq (preceding-char) ?\})
(cperl-after-block-p lim))
(and (eq (following-char) ?.) ; in format: see comment above
(eq (get-text-property (point) 'syntax-type)
'format)))))))))