diff options
author | Karl Williamson <khw@cpan.org> | 2014-06-12 21:50:29 -0600 |
---|---|---|
committer | Karl Williamson <khw@cpan.org> | 2014-06-12 22:32:32 -0600 |
commit | 412f55bbce575aecc79b1ca79fd2856893dd8738 (patch) | |
tree | a033fdcf6ed906fa1b4170fea5d491e635d32724 /regen | |
parent | 4a7e65afe24af2e709b485d8bb4a67fe3d047ada (diff) | |
download | perl-412f55bbce575aecc79b1ca79fd2856893dd8738.tar.gz |
Deprecate unescaped literal "{" in regex patterns
This commit also causes escaped (by a backslash) "(", "[", and "{" to be
considered literally. In the previous 2 Perl versions, the escaping was
ignored, and a (default-on) deprecation warning was raised. Now that we
have warned for 2 release cycles, we can change the meaning.of escaping
to actually do something
Warning when a literal left brace is not escaped by a backslash, will
allow us to eventually use this character in more contexts as being
meta, allowing us to extend the language. For example, the lower limit
of a quantifier could be omited, and better error checking instituted,
or things like \w could be followed by a {...} indicating some special
word character, like \w{Greek} to restrict to just Greek word
characters.
We tried to do this in v5.16, and many CPAN modules changed to backslash
their left braces at that time. However we had to back out that change
before 5.16 shipped because it turned out that escaping a left brace in
some contexts didn't work, namely when the brace would normally be a
metacharacter (for example surrounding a quantifier), and the pattern
delimiters were { }. Instead we raised the useless backslash warning
mentioned above, which has now been there for the requisite 2 cycles.
This patch partially reverts 2 patches. The first,
e62d0b1335a7959680be5f7e56910067d6f33c1f, partially reverted
the deprecation of unescaped literal left brace. The other,
4d68ffa0f7f345bc1ae6751744518ba4bc3859bd, instituted the deprecation of
the useless left-characters.
Note that, as in the original attempt to deprecate, we don't raise a
warning if the left brace is the first character in the pattern. This
is because in that position it can't be a metacharacter, so we don't
require any disambiguation, and we found that if we did raise an error,
there were quite a few places where this occurred.
Diffstat (limited to 'regen')
-rw-r--r-- | regen/mk_PL_charclass.pl | 8 |
1 files changed, 0 insertions, 8 deletions
diff --git a/regen/mk_PL_charclass.pl b/regen/mk_PL_charclass.pl index d23970d221..5a073c6ea3 100644 --- a/regen/mk_PL_charclass.pl +++ b/regen/mk_PL_charclass.pl @@ -47,7 +47,6 @@ my @properties = qw( XDIGIT VERTSPACE IS_IN_SOME_FOLD - BACKSLASH_FOO_LBRACE_IS_META ); # Read in the case fold mappings. @@ -236,13 +235,6 @@ for my $ord (0..255) { $re = qr/\p{Is_Non_Final_Fold}/; } elsif ($name eq 'IS_IN_SOME_FOLD') { $re = qr/\p{_Perl_Any_Folds}/; - } elsif ($name eq 'BACKSLASH_FOO_LBRACE_IS_META') { - - # This is true for FOO where FOO is the varying character in: - # \a{, \b{, \c{, ... - # and the sequence has non-literal meaning to Perl; so it is true - # for 'x' because \x{ is special, but not 'a' because \a{ isn't. - $re = qr/[gkNopPx]/; } else { # The remainder have the same name and values as Unicode $re = eval "qr/\\p{$name}/"; use Carp; |