Subject: bug#3943: 23.0.96; CPerl-mode is too electric

From: Chong Yidong <[email-masked]>
Date: Sun, 16 Aug 2009 19:24:23 -0400

Ilya Zakharevich <[email-masked]> writes:

>> Could you take a look at the following bug report?  Thanks.
>> 
>> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3943
>
> The home of CPerl is ilyaz.org/software/emacs
>
> Please report results with my version.  (The shipped-with-Emacs
> version is hopelessly buggy...)

The problem exists in upstream CPerl as well.  The bug arises from line
3763 (cperl-electric-paren):

  (if (eq last-command-char ?<)
      (progn
        (and abbrev-mode ; later it is too late, may be after `for'
             (expand-abbrev))
        (cperl-after-expr-p nil "{;(,:="))
    1))

Because one abbrev expansion already takes place when typing "while ",
this code leads to another, extra expansion.  Removing the
(and abbrev-mode...) expression fixes the problem.