Subject: cperl syntax highlighting breaking on certain complex regular expressions

From: Nathan Trapuzzano <[email-masked]>
Date: Wed, 14 Mar 2012 09:05:34 -0400

Syntax highlighting in cperl-mode breaks for certain (or perhaps all)
complex regular expressions modified by /e and/or /x.

Here are 2 examples of offending code:

example 1 -----

sub greek_with_latin
{
    my ($self, $ref) = @_;
#     $self->{perseus_morph} = 0;
    $$ref =~ s/([^\&]*)([^\$]*)/
                                        my $gk = $1 || '';
                                        if ($gk)
                                        {
                                                $self->{perseus_morph} ? 
                                                  $self->perseus_handler(\$gk, 'grk') 
                                                : $self->{greek_handler}->(\$gk);
                                        }
                                        my $lt = $2 || '';
                                        if ($lt)
                                        {
                                                $self->{perseus_morph} ? 
                                                  $self->perseus_handler(\$lt, 'lat') 
                                                : $self->{latin_handler}->(\$lt);
                                        }
                                        $gk.$lt;
                                        /gex;
}

-----
example 2 -----

$$ref =~ s/'/$self->{ibycus4} ? '{\'}' : '\'\''/ge;

-----

Lines of code coming after "blocks" like these are all highlighted as
though they were quoted (at least that's what seems to be the case
judging from the color).

Running Arch build 23.4-1:

In GNU Emacs 23.4.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.24.9)
 of 2012-02-01 on shirley.hoetzel.info
configured using `configure  '--prefix=/usr' '--sysconfdir=/etc'
'--libexecdir=/usr/lib' '--localstatedir=/var' '--wit\ h-x-toolkit=gtk'
'--with-xft' 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe
-fstack-protector --param=ssp-buffer-size\ =4 -D_FORTIFY_SOURCE=2'
'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu''