This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Give better instructions about (?^...)
authorKarl Williamson <public@khwilliamson.com>
Fri, 24 Sep 2010 01:50:34 +0000 (19:50 -0600)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 24 Sep 2010 05:15:50 +0000 (22:15 -0700)
Avar pointed out that there is an existing API wwhich helps in coping
with this

pod/perldelta.pod

index 8902b44..3ac058d 100644 (file)
@@ -68,11 +68,22 @@ L</Selected Bug Fixes> section.
 Default regular expression modifiers are now notated by using
 C<(?^...)>.  Code relying on the old stringification will fail.  The
 purpose of this is so that when new modifiers are added, such code will
 Default regular expression modifiers are now notated by using
 C<(?^...)>.  Code relying on the old stringification will fail.  The
 purpose of this is so that when new modifiers are added, such code will
-not have to change, as the stringification will automatically
-incorporate the new modifiers.
+not have to change (after this one time), as the stringification will
+automatically incorporate the new modifiers.
 
 Code that needs to work properly with both old- and new-style regexes
 
 Code that needs to work properly with both old- and new-style regexes
-can use something like the following:
+can avoid the whole issue by using:
+
+ use re qw(regexp_pattern);
+ my ($pat, $mods) = regexp_pattern($re_ref);
+
+where C<$re_ref> is a reference to a compiled regular expression.  Upon
+return, C<$mods> will be a string containing all the non-default
+modifiers used when the regular expression was compiled, and C<$pattern>
+the actual pattern.
+
+If the actual stringification is important, you can use something like
+the following:
 
     # Accept both old and new-style stringification
     my $modifiers = (qr/foobar/ =~ /\Q(?^/) ? '^' : '-xism';
 
     # Accept both old and new-style stringification
     my $modifiers = (qr/foobar/ =~ /\Q(?^/) ? '^' : '-xism';