Clarifications to the perldelta notes on smart match
[p5sagit/p5-mst-13.2.git] / pod / perl5110delta.pod
1 =head1 NAME
2
3 perldelta - what is new for perl v5.11.0
4
5 =head1 DESCRIPTION
6
7 This document describes differences between the 5.10.0 and the 5.11.0
8 development releases.
9
10 =head1 Incompatible Changes
11
12 =head2 Switch statement changes
13
14 The handling of complex expressions by the C<given>/C<when> switch
15 statement has been enhanced. There are two new cases where C<when> now
16 interprets its argument as a boolean, instead of an expression to be used
17 in a smart match:
18
19 =over 4
20
21 =item flip-flop operators
22
23 The C<..> and C<...> flip-flop operators are evaluated in boolean context,
24 following their usual semantics; see L<perlop/"Range Operators">.
25
26 =item defined-or operator
27
28 A compound expression involving the defined-or operator, as in
29 C<when (expr1 // expr2)>, will be treated as boolean if the first
30 expression is boolean. (This just extends the existing rule that applies
31 to the regular or operator, as in C<when (expr1 || expr2)>.)
32
33 =back
34
35 The next paragraph details more changes brought to the semantics to
36 the smart match operator, that naturally also modify the behaviour
37 of the switch statements where smart matching is implicitly used.
38
39 =head2 Smart match changes
40
41 =head3 Changes to type-based dispatch
42
43 The smart match operator C<~~> is no longer commutative. The behaviour of
44 a smart match now depends primarily on the type of its right hand
45 argument. Moreover, its semantics has been adjusted for greater
46 consistency or usefulness in several cases. While the general backwards
47 compatibility is maintained, several changes must be noted:
48
49 =over 4
50
51 =item *
52
53 Code references with an empty prototype are no longer treated specially.
54 They are passed an argument like the other code references (even if they
55 choose to ignore it).
56
57 =item *
58
59 C<%hash ~~ sub {}> and C<@array ~~ sub {}> now test that the subroutine
60 returns a true value for each key of the hash (or element of the
61 array), instead of passing the whole hash or array as a reference to
62 the subroutine.
63
64 =item *
65
66 Due to the commutativity breakage, code references are no longer
67 treated specially when appearing on the left of the C<~~> operator,
68 but like any vulgar scalar.
69
70 =item *
71
72 C<undef ~~ %hash> is always false (since C<undef> can't be a key in a
73 hash). No implicit conversion to C<""> is done (as was the case in perl
74 5.10.0).
75
76 =item *
77
78 C<$scalar ~~ @array> now always distributes the smart match across the
79 elements of the array. It's true if one element in @array verifies
80 C<$scalar ~~ $element>. This is a generalization of the old behaviour
81 that tested whether the array contained the scalar.
82
83 =back
84
85 The full dispatch table for the smart match operator is given in
86 L<perlsyn/"Smart matching in detail">.
87
88 =head3 Smart match and overloading
89
90 According to the rule of dispatch based on the rightmost argument type,
91 when an object overloading C<~~> appears on the right side of the
92 operator, the overload routine will always be called (with a 3rd argument
93 set to a true value, see L<overload>.) However, when the object will
94 appear on the left, the overload routine will be called only when the
95 rightmost argument is a simple scalar. This way distributivity of smart match
96 across arrays is not broken, as well as the other behaviours with complex
97 types (coderefs, hashes, regexes). Thus, writers of overloading routines
98 for smart match mostly need to worry only with comparing against a scalar,
99 and possibly with stringification overloading; the other common cases
100 will be automatically handled consistently.
101
102 C<~~> will now refuse to work on objects that do not overload it (in order
103 to avoid relying on the object's underlying structure). (However, if the
104 object overloads the stringification or the numification operators, and
105 if overload fallback is active, it will be used instead, as usual.)
106
107 =head1 Core Enhancements
108
109 =head2 The C<overloading> pragma
110
111 This pragma allows you to lexically disable or enable overloading
112 for some or all operations. (Yuval Kogman)
113
114 =head2 C<\N> regex escape
115
116 A new regex escape has been added, C<\N>. It will match any character that
117 is not a newline, independently from the presence or absence of the single
118 line match modifier C</s>. (If C<\N> is followed by an opening brace and
119 by a letter, perl will still assume that a Unicode character name is
120 coming, so compatibility is preserved.) (Rafael Garcia-Suarez)
121
122 =head2 Parallel tests
123
124 The core distribution can now run its regression tests in parallel on
125 Unix-like platforms. Instead of running C<make test>, set C<TEST_JOBS> in
126 your environment to the number of tests to run in parallel, and run
127 C<make test_harness>. On a Bourne-like shell, this can be done as
128
129     TEST_JOBS=3 make test_harness  # Run 3 tests in parallel
130
131 An environment variable is used, rather than parallel make itself, because
132 L<TAP::Harness> needs to be able to schedule individual non-conflicting test
133 scripts itself, and there is no standard interface to C<make> utilities to
134 interact with their job schedulers.
135
136 =head1 Modules and Pragmata
137
138 =head2 Pragmata Changes
139
140 =over 4
141
142 =item C<overloading>
143
144 See L</"The C<overloading> pragma"> above.
145
146 =back
147
148 =head1 Utility Changes
149
150 =head1 Documentation
151
152 =head1 Performance Enhancements
153
154 =head1 Installation and Configuration Improvements
155
156 =head1 Selected Bug Fixes
157
158 =over 4
159
160 =item C<-I> on shebang line now adds directories in front of @INC
161
162 as documented, and as does C<-I> when specified on the command-line.
163 (Renée Bäcker)
164
165 =back
166
167 =head1 New or Changed Diagnostics
168
169 =head1 Changed Internals
170
171 =head1 Known Problems
172
173 =head2 Platform Specific Problems
174
175 =head1 Reporting Bugs
176
177 If you find what you think is a bug, you might check the articles
178 recently posted to the comp.lang.perl.misc newsgroup and the perl
179 bug database at http://bugs.perl.org/ .  There may also be
180 information at http://www.perl.org/ , the Perl Home Page.
181
182 If you believe you have an unreported bug, please run the B<perlbug>
183 program included with your release.  Be sure to trim your bug down
184 to a tiny but sufficient test case.  Your bug report, along with the
185 output of C<perl -V>, will be sent off to perlbug@perl.org to be
186 analysed by the Perl porting team.
187
188 If the bug you are reporting has security implications, which make it
189 inappropriate to send to a publicly archived mailing list, then please send
190 it to perl5-security-report@perl.org. This points to a closed subscription
191 unarchived mailing list, which includes all the core committers, who be able
192 to help assess the impact of issues, figure out a resolution, and help
193 co-ordinate the release of patches to mitigate or fix the problem across all
194 platforms on which Perl is supported. Please only use this address for security
195 issues in the Perl core, not for modules independently distributed on CPAN.
196
197 =head1 SEE ALSO
198
199 The F<Changes> file for exhaustive details on what changed.
200
201 The F<INSTALL> file for how to build Perl.
202
203 The F<README> file for general stuff.
204
205 The F<Artistic> and F<Copying> files for copyright information.
206
207 =cut