in reply to How To Remove Warnings From Regex

Hello roho,

Change $1 to \1 within the regex:

use strict; use warnings; my @txt = ('cc', 'cz'); for (@txt) { if (m/^(.)\1$/) { print "True \$_ = |$_| \$1 = |$1|\n"; } else { print "False \$_ = |$_| \$1 = |$1|\n"; } }

Output:

14:13 >perl 2092.SoPW.pl True $_ = |cc| $1 = |c| False $_ = |cz| $1 = |c| 14:14 >

As you can see:

See e.g. Capture groups.

Hope that helps,

Athanasius <°(((><contra mundum סתם עוד האקר של פרל,

Replies are listed 'Best First'.
Re^2: How To Remove Warnings From Regex
by roho (Bishop) on Feb 04, 2024 at 04:44 UTC
    Thank you Athanasius! That works perfectly. For as long as I can remember, I've avoided the backslash numbers in favor of the dollar-sign numbers, but I see in this case that is exactly what is called for. Thanks again.

    "It's not how hard you work, it's how much you get done."

      \1 works inside the regex where the capture group was defined. $1 works everywhere else, i.e. in a replacement of a substitution. $1 in a regex refers to a previously matched regex (which explains the uninitialized warnings).

      map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
        Thanks for the explanation choroba. It always helps to know the "why" behind the way things work. It makes it easier to remember in the future when a similar situation arises. Perl Monks are the best!

        "It's not how hard you work, it's how much you get done."