Login
RT #77510: Left curlys as literals in regexps are deprecated.
authorTom Wyant <harryfmudd@comcast.net>
Mon, 28 May 2012 23:53:27 +0000 (23:53 +0000)
committerTom Wyant <harryfmudd@comcast.net>
Mon, 28 May 2012 23:53:27 +0000 (23:53 +0000)
The use of left curly brackets ("{") as literals in regular expressions
is deprecated, and as of Perl 5.17.0 produces a compiler warning. Given
the code policies required for self-compliance, the solution is to make
them into a singleton character class (i.e. "[{]").

A change in the version of PPIx::Regexp was also done, because that also
turned out to have literal curlies (blush!).

Changes
inc/Perl/Critic/BuildUtilities.pm
lib/Perl/Critic/Document.pm
lib/Perl/Critic/Policy/CodeLayout/RequireTidyCode.pm

diff --git a/Changes b/Changes
index 5fc0a11..f76e3ea 100644 (file)
--- a/Changes
+++ b/Changes
@@ -5,6 +5,11 @@ Next version, whenever
       'no warnings' statement, so that 'no warnings "qw"' is recognized
       as supressing just 'qw' warnings. RT #74647.
 
       'no warnings' statement, so that 'no warnings "qw"' is recognized
       as supressing just 'qw' warnings. RT #74647.
 
+    Other Changes:
+    * Make all unescaped literal "{" characters in regexps into
+      character classes. These are deprecated, and became noisy with
+      Perl 5.17.0.  RT #77510.
+
 [1.117] Released on 2011-12-21
 
     HAPPY HOLIDAYS!
 [1.117] Released on 2011-12-21
 
     HAPPY HOLIDAYS!
index 6e4bf69..7ae7ab5 100644 (file)
@@ -58,7 +58,7 @@ sub required_module_versions {
         'PPI::Node'                     => '1.215',
         'PPI::Token::Quote::Single'     => '1.215',
         'PPI::Token::Whitespace'        => '1.215',
         'PPI::Node'                     => '1.215',
         'PPI::Token::Quote::Single'     => '1.215',
         'PPI::Token::Whitespace'        => '1.215',
-        'PPIx::Regexp'                  => '0.022', # RT 72151
+        'PPIx::Regexp'                  => '0.027', # Literal { deprecated in re
         'PPIx::Utilities::Node'         => '1.001',
         'PPIx::Utilities::Statement'    => '1.001',
         'Perl::Tidy'                    => 0,
         'PPIx::Utilities::Node'         => '1.001',
         'PPIx::Utilities::Statement'    => '1.001',
         'Perl::Tidy'                    => 0,
index a19ae55..9d2745d 100644 (file)
@@ -548,7 +548,7 @@ sub _disable_shebang_fix {
     # fixing strings.  This matches most of the ones I've found in my own Perl
     # distribution, but it may not be bullet-proof.
 
     # fixing strings.  This matches most of the ones I've found in my own Perl
     # distribution, but it may not be bullet-proof.
 
-    my $fixin_rx = qr<^eval 'exec .* \$0 \${1[+]"\$@"}'\s*[\r\n]\s*if.+;>ms; ## no critic (ExtendedFormatting)
+    my $fixin_rx = qr<^eval 'exec .* \$0 \$[{]1[+]"\$@"}'\s*[\r\n]\s*if.+;>ms; ## no critic (ExtendedFormatting)
     if ( $first_stmnt =~ $fixin_rx ) {
         my $line = $first_stmnt->location->[0];
         $self->{_disabled_line_map}->{$line}->{ALL} = 1;
     if ( $first_stmnt =~ $fixin_rx ) {
         my $line = $first_stmnt->location->[0];
         $self->{_disabled_line_map}->{$line}->{ALL} = 1;
index 88e0497..daa5330 100644 (file)
@@ -76,7 +76,7 @@ sub violates {
     # Remove the shell fix code from the top of program, if applicable
     ## no critic (ProhibitComplexRegexes)
     my $shebang_re = qr< [#]! [^\015\012]+ [\015\012]+ >xms;
     # Remove the shell fix code from the top of program, if applicable
     ## no critic (ProhibitComplexRegexes)
     my $shebang_re = qr< [#]! [^\015\012]+ [\015\012]+ >xms;
-    my $shell_re   = qr<eval [ ] 'exec [ ] [^\015\012]* [ ] \$0 [ ] \${1[+]"\$@"}'
+    my $shell_re   = qr<eval [ ] 'exec [ ] [^\015\012]* [ ] \$0 [ ] \$[{]1[+]"\$@"}'
                         [ \t]*[\012\015]+ [ \t]* if [^\015\012]+ [\015\012]+ >xms;
     $source =~ s/\A ($shebang_re) $shell_re /$1/xms;
 
                         [ \t]*[\012\015]+ [ \t]* if [^\015\012]+ [\015\012]+ >xms;
     $source =~ s/\A ($shebang_re) $shell_re /$1/xms;