Commit | Line | Data |
f6eae373 |
1 | =head1 NAME |
2 | |
3 | perldelta - what is new for perl v5.9.5 |
4 | |
5 | =head1 DESCRIPTION |
6 | |
7 | This document describes differences between the 5.9.4 and the 5.9.5 |
8 | development releases. See L<perl590delta>, L<perl591delta>, |
9 | L<perl592delta>, L<perl593delta> and L<perl594delta> for the differences |
10 | between 5.8.0 and 5.9.4. |
11 | |
12 | =head1 Incompatible Changes |
13 | |
14 | =head1 Core Enhancements |
15 | |
072f65b4 |
16 | =head2 Regular expressions |
17 | |
18 | =over 4 |
19 | |
20 | =item Recursive Patterns |
21 | |
22 | It is now possible to write recursive patterns without using the C<(??{})> |
23 | construct. This new way is more efficient, and in many cases easier to |
24 | read. |
25 | |
26 | Each capturing parenthesis can now be treated as an independent pattern |
27 | that can be entered by using the C<(?PARNO)> syntax (C<PARNO> standing for |
28 | "parenthesis number"). For example, the following pattern will match |
29 | nested balanced angle brackets: |
30 | |
31 | / |
32 | ^ # start of line |
33 | ( # start capture buffer 1 |
34 | < # match an opening angle bracket |
35 | (?: # match one of: |
36 | (?> # don't backtrack over the inside of this group |
37 | [^<>]+ # one or more non angle brackets |
38 | ) # end non backtracking group |
39 | | # ... or ... |
40 | (?1) # recurse to bracket 1 and try it again |
41 | )* # 0 or more times. |
42 | > # match a closing angle bracket |
43 | ) # end capture buffer one |
44 | $ # end of line |
45 | /x |
46 | |
47 | Note, users experienced with PCRE will find that the Perl implementation |
48 | of this feature differs from the PCRE one in that it is possible to |
49 | backtrack into a recursed pattern, whereas in PCRE the recursion is |
50 | atomic or "possessive" in nature. |
51 | |
52 | =item Named Capture Buffers |
53 | |
54 | It is now possible to name capturing parenthesis in a pattern and refer to |
55 | the captured contents by name. The naming syntax is C<< (?<NAME>....) >>. |
56 | It's possible to backreference to a named buffer with the C<< \k<NAME> >> |
57 | syntax. In code, the new magical hash C<%+> can be used to access the |
58 | contents of the buffers. |
59 | |
60 | Thus, to replace all doubled chars, one could write |
61 | |
62 | s/(?<letter>.)\k<letter>/$+{letter}/g |
63 | |
64 | Only buffers with defined contents will be "visible" in the hash, so |
65 | it's possible to do something like |
66 | |
67 | foreach my $name (keys %+) { |
68 | print "content of buffer '$name' is $+{$name}\n"; |
69 | } |
70 | |
71 | Users exposed to the .NET regex engine will find that the perl |
72 | implementation differs in that the numerical ordering of the buffers |
73 | is sequential, and not "unnamed first, then named". Thus in the pattern |
74 | |
75 | /(A)(?<B>B)(C)(?<D>D)/ |
76 | |
77 | $1 will be 'A', $2 will be 'B', $3 will be 'C' and $4 will be 'D' and not |
78 | $1 is 'A', $2 is 'C' and $3 is 'B' and $4 is 'D' that a .NET programmer |
79 | would expect. This is considered a feature. :-) |
80 | |
b9b4dddf |
81 | =item Possessive Quantifiers |
82 | |
83 | Perl now supports the "possessive quantifier" syntax of the "atomic match" |
84 | pattern. Basically a possessive quantifier matches as much as it can and never |
85 | gives any back. Thus it can be used to control backtracking. The syntax is |
86 | similar to non-greedy matching, except instead of using a '?' as the modifier |
87 | the '+' is used. Thus C<?+>, C<*+>, C<++>, C<{min,max}+> are now legal |
88 | quantifiers. |
89 | |
072f65b4 |
90 | =back |
91 | |
f6eae373 |
92 | =head1 Modules and Pragmas |
93 | |
94 | =head2 New Core Modules |
95 | |
96 | =head1 Utility Changes |
97 | |
98 | =head1 Documentation |
99 | |
100 | =head1 Performance Enhancements |
101 | |
102 | =head1 Installation and Configuration Improvements |
103 | |
104 | =head1 Selected Bug Fixes |
105 | |
106 | =head1 New or Changed Diagnostics |
107 | |
108 | =head1 Changed Internals |
109 | |
110 | =head1 Known Problems |
111 | |
112 | =head2 Platform Specific Problems |
113 | |
114 | =head1 Reporting Bugs |
115 | |
116 | If you find what you think is a bug, you might check the articles |
117 | recently posted to the comp.lang.perl.misc newsgroup and the perl |
118 | bug database at http://rt.perl.org/rt3/ . There may also be |
119 | information at http://www.perl.org/ , the Perl Home Page. |
120 | |
121 | If you believe you have an unreported bug, please run the B<perlbug> |
122 | program included with your release. Be sure to trim your bug down |
123 | to a tiny but sufficient test case. Your bug report, along with the |
124 | output of C<perl -V>, will be sent off to perlbug@perl.org to be |
125 | analysed by the Perl porting team. |
126 | |
127 | =head1 SEE ALSO |
128 | |
129 | The F<Changes> file for exhaustive details on what changed. |
130 | |
131 | The F<INSTALL> file for how to build Perl. |
132 | |
133 | The F<README> file for general stuff. |
134 | |
135 | The F<Artistic> and F<Copying> files for copyright information. |
136 | |
137 | =cut |