Subject: bug#66050: Making perl-mode.el obsolete

From: Mauro Aranda <[email-masked]>
Date: Thu, 21 Sep 2023 11:13:51 -0300

> Corwin Brust <[email-masked]> writes:
 >
 >> On Wed, Sep 20, 2023 at 6:26 PM Stefan Kangas 
<[email-masked]> wrote:
 >>>
 >>> Richard Stallman <[email-masked]> writes:
 >>>
 >>>> If it is feasible to put conditionals in CPerl mode to make it behave
 >>>> like Perl mode -- or close enough that almost everyone is happy with
 >>>> it -- maybe then we could obsolete the current Perl mode.
 >>>
 >>> Agreed.  Let's start with adding such options to cperl-mode.
 >>
 >> Does there already exist a list of cperl features/behaviors which
 >> perl-mode users find objectionable?
 >
 > I'm only aware of the list provided by Jens Schmidt upthread:
 >
 >      https://debbugs.gnu.org/cgi/bugreport.cgi?bug=66050#16

What would be a good way of collecting this information?

In addition to what Jens Schmidt said, I can add that:

1. If I have something like:
my $some_code = "";
$some_code.= q(
my $counter = 0;
);

If I put point at column 0 of the line "my $counter", and hit TAB, I get
indentation in perl-mode.  I don't in cperl-mode.  I tried to look into
options for making this work but I couldn't find anything.

2. While I'm typing the above string, I get messages about string/RE not
found:
End of ‘q( ... )’ string/RE not found: (scan-error Unbalanced 
parentheses 1092 1874)
End of ‘q( ... )’ string/RE not found: (scan-error Unbalanced 
parentheses 1092 1918) [2 times]
End of ‘q( ... )’ string/RE not found: (scan-error Unbalanced 
parentheses 1092 1962) [2 times]

That's annoying.

So far, my settings for getting a perl-mode experience in cperl-mode,
with emacs -Q: (taken from a custom file):
'(cperl-highlight-variables-indiscriminately t)
'(cperl-indent-level 4)
'(cperl-indent-parens-as-block t)
'(cperl-invalid-face 'default)

'(cperl-array-face ((t (:inherit cperl-hash-face))))
'(cperl-hash-face ((t (:underline t :inherit 
font-lock-variable-name-face))))
'(cperl-nonoverridable-face ((t (:inherit default))))