in reply to Unterminated \g... pattern in regex behaving badly on Windows

The rule with regexes is that non-alphanumeric characters (\W) lose their special meaning when escaped with a \, (\* is a litteral '*', \( is a litteral parenthesis etc...), while alphanumeric characters gain a special meaning when escaped. So \1, \2 etc... are reference to captured groups, \w means alphanumeric characters. This means that \x where x is a letter should always be considered to have a special meaning, even if this is not the case for the current version of perl, because such a meaning may be added in future versions. And yes, even interpolated variables are read using the regex syntax, and not taken litteraly.

\g is the start of a regex special meaning, referenced in perlreref:

\g1 or \g{1}, \g2 ... Matches the text from the Nth group
Since you don't have a number after you \g, this is, indeed, an incomplete pattern.

The solution is to remove its special meaning to \ (the escaping character), by adding another \ in front of it. The easiest way to do that is to use quotemeta which will leave all alphanumeric characters untouched, and escape all others (those that may have a special meaning). my $esc_bad_gitdir = quotemeta $bad_gitdit;
Or using the \Q shortcut: qr/Cannot find directory\(ies\): \Q$bad_gitdir/

Edit: there were typos everywhere...

Replies are listed 'Best First'.
Re^2: Unterminated \g... pattern in regex behaving badly on Windows
by Monk::Thomas (Friar) on Nov 16, 2016 at 13:46 UTC

    You could also quotemeta the whole string. Then there's no need to manually escape the parenthesis:

    qr/\QCannot find directory(ies): $bad_gitdir\E/

    or maybe even

    qr/ \QCannot find directory(ies): $bad_gitdir\E /xms

    (The \E terminates the escaping - in case you want to add something else later on.)

      I went with that recommendation:
      - like($@, qr/Cannot find directory\(ies\): $bad_gitdir/, + like($@, qr/\QCannot find directory(ies): $bad_gitdir\E/,
      Although in a couple of places I had to use the \Q ... \E syntax twice within one pattern:
      - like($@, qr/Cannot find file\(s\) to be tested:.*$bad_target_args +->[1]/, + like($@, qr/\QCannot find file(s) to be tested:\E.*\Q$bad_target_ +args->[1]\E/,
      Thanks to all who responded. The revised code is available at Devel-Git-MultiBisect-0.07.tar.gz and should be available on CPAN within the hour. If anyone on Windows could give that a smoke test, that would be great.

      Thank you very much.

      Jim Keenan
Re^2: Unterminated \g... pattern in regex behaving badly on Windows
by jkeenan1 (Deacon) on Nov 16, 2016 at 15:17 UTC
    Eily wrote:
    \g is the start of a regex special meaning, referenced in perlreref:
    Well, I now realize that a big part of my diagnostic problem was that I failed to recognize \g as referring to a capture group. This syntax has been in Perl for some time now but I never had occasion to use it and hence was blissfully unaware of it. I was also confusing it with the /g qualifier. Thank you very much.
    Jim Keenan