summaryrefslogtreecommitdiff
path: root/pod/perl5152delta.pod
blob: 629d50106664bba4b3289f46e6edd644d027aa50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
=encoding utf8

=for comment
This has been completed up to perl-5.12.1

=head1 NAME

perl5152delta - what is new for perl v5.15.2

=head1 DESCRIPTION

This document describes differences between the 5.15.1 release and
the 5.15.2 release.

If you are upgrading from an earlier release such as 5.15.0, first read
L<perl5151delta>, which describes differences between 5.15.0 and
5.15.1.

=head1 Core Enhancements

=head2 Subroutines in the CORE namespace

Many Perl keywords are now available as subroutines in the CORE namespace.
Most of these cannot be called through references or via C<&foo> syntax
yet, but must be called as barewords.  In other words, you can now do
this:

    BEGIN { *entangle = \&CORE::tie }
    entangle $variable, $package, @args;

This currently works for overridable keywords other than C<dump> and the
infix operators.  Calling through references only works for functions that
take no arguments (like C<wantarray>).

Work is under way to allow more of these subroutines to be called through
references.

=head2 C<__FILE__()> Syntax

The C<__FILE__>, C<__LINE__> and C<__PACKAGE__> tokens can now be written
with an empty pair of parentheses after them.  This makes them parse the
same way as C<time>, C<fork> and other built-in functions.

=head1 Incompatible Changes

=head2 C<UNIVERSAL::VERSION> now returns $VERSION

C<UNIVERSAL::VERSION> now return whatever is in $VERSION, instead of
returning $VERSION converted to a version object and then to a string.
As a result, it no longer parses the version when called without arguments,
so it no longer dies in that case for malformed versions.  This allows
custom version number parsers to use C<< ->VERSION >> to retrieve the
version number, as was the case in Perl 5.8 [perl #95544].

=head1 Modules and Pragmata

=head2 Updated Modules and Pragmata

=over 4

=item *

L<B> has been upgraded from version 1.30 to version 1.31

The XS code has changed slightly, as it was too tightly coupled to
the contents of the header F<embedvar.h>. Documentation in L<B::Terse>
and L<B::Xref> has been improved, hence their versions have been increased.

=item *

L<CPAN> has been upgraded from version 1.9600 to version 1.9800

=item *

L<CPANPLUS> has been upgraded from version 0.9108 to version 0.9109

Fixed support for v-strings and x.y.z versions with v5.8.4

=item *

L<CPAN::Meta> has been upgraded from version 2.110930_001 to version 2.112150

Stringify any objects encountered during conversion.

Clarified that file paths in the 'provides' section must be in
Unix-style (i.e. forward slashes)

=item *

L<DB_File> has been upgraded from version 1.822 to version 1.824

Will now croak if attempt to freeze/thaw DB_File object [RT #69985]

=item *

L<diagnostics> has been upgraded from version 1.23 to 1.24.

It now supports the %u formatting code.  Previously it was unable to find
descriptions for messages whose entries in L<perldiag> included that code
[perl #94988].

=item *

L<Encode> has been upgraded from version 2.43 to version 2.44

Addressed 'decode_xs n-byte heap-overflow' security bug in Unicode.xs

=item *

L<ExtUtils::Install> has been upgraded from version 1.56 to version 1.57.

There is no change to ExtUtils::Install other than the version number
increase, but L<ExtUtils::Installed> has been upgraded from version 1.999_001
to version 1.999002 and a new C<skip_cwd> attribute has been added.

=item *

L<ExtUtils::MakeMaker> has been upgraded from version 6.58 to version 6.59

=item *

L<ExtUtils::Manifest> has been upgraded from version 1.58 to version 1.60

=item *

L<ExtUtils::ParseXS> has been upgraded from 3.00_01 to 3.00_04.

=item *

L<IPC::Open3> has been upgraded from version 1.11 to 1.12.

C<open3> with "-" for the program name works once more.  This was broken in
version 1.06 (and hence in Perl 5.14.0) [perl #95748].

=item *

L<Module::Build> has been upgraded from version 0.3800 to version 0.39_01.

Pod to HTML internals changed to support revisions to Pod::Html in core.
Also fixes some minor bugs. [rt.cpan.org #68585] [rt.cpan.org #67893]
[rt.cpan.org #67008]

=item *

L<Module::CoreList> has been upgraded from version 2.54 to version 2.55

=item *

L<Module::Load> has been upgraded from version 0.18 to version 0.20

=item *

L<Module::Metadata> has been upgraded from version 1.000004 to version 1.000005

Added C<new_from_handle()> method.

=item *

L<Params::Check> has been upgraded from version 0.28 to version 0.32

=item *

L<PerlIO::via> has been upgraded from version 0.11 to version 0.12.

The only change is a correction in the documentation.

=item *

L<Term::ANSIColor> has been upgraded from version 3.00 to version 3.01

Only interpret an initial array reference as a list of colors, not any initial
reference, allowing the colored function to work properly on objects with
stringification defined.

=item *

L<Unicode::Collate> has been upgraded from version 0.77 to version 0.78

=item *

L<Unicode::Normalize> has been upgraded from version 1.12 to version 1.13

=back

=head1 Documentation

=head2 New Documentation

=head3 L<perlexperiment>

This document is intended to provide a list of experimental features in
Perl.  It is still a work in progress.

=head2 Changes to Existing Documentation

=head3 L<perlsub>

=over 4

=item *

The ($;) prototype syntax, which has existed for rather a long time, is now
documented in L<perlsub>.  It allows a unary function to have the same
precedence as a list operator.

=back

=head1 Diagnostics

The following additions or changes have been made to diagnostic output,
including warnings and fatal error messages.  For the complete list of
diagnostic messages, see L<perldiag>.

=head2 New Diagnostics

=head3 New Errors

=over 4

=item *

L<&CORE::%s cannot be called directly|perldiag/"&CORE::%s cannot be called directly">

(F) You tried to call a subroutine in the C<CORE::> namespace
with C<&foo> syntax or through a reference.  The subroutines
in this package cannot yet be called that way, but must be
called as barewords.  Something like this will work:

    BEGIN { *shove = \&CORE::push; }
    shove @array, 1,2,3; # pushes on to @array

=back

=head1 Utility Changes

=head3 L<perlivp>

=over 4

=item *

Fixed a bug whereby other perls under the current directory could cause
false positive failures.

=item *

Tests for .ph files have been removed, as these test have been optional since
2005 and .ph files are no longer generated during installation.

=back

=head3 L<splain>

See the entry for C<< diagnostics >> in L</Updated Modules and Pragmata>,
above.

=head1 Configuration and Compilation

=over 4

=item *

F<makedef.pl> has been refactored. This should have no noticeable affect on
any of the platforms that use it as part of their build (AIX, VMS, Win32).

=item *

C<useperlio> can no longer be disabled.

=back

=head1 Platform Support

=over 4

=item HP-UX PA-RISC/64 now supports gcc-4.x

A fix to correct the socketsize now makes the test suite pass on HP-UX
PA-RISC for 64bitall builds.

=back

=head1 Internal Changes

=over 4

=item *

F<embedvar.h> has been simplified, and one level of macro indirection for
PL_* variables has been removed for the default (non-multiplicity)
configuration. PERLVAR*() macros now directly expand their arguments to
tokens such as C<PL_defgv>, instead of expanding to C<PL_Idefgv>, with
F<embedvar.h> defining a macro to map C<PL_Idefgv> to C<PL_defgv>. XS code
which has unwarranted chumminess with the implementation may need updating.

=item *

A C<coreargs> opcode has been added, to be used by C<&CORE::foo> subs to sort
out C<@_>.

=item *

An API has been added to explicitly choose whether or not to export XSUB
symbols.  More detail can be found in the comments for commit e64345f8.

=back

=head1 Selected Bug Fixes

=over 4

=item *

Locking a subroutine (via C<lock &sub>) is no longer a compile-time error
for regular subs.  For lvalue subroutines, it no longer tries to return the
sub as a scalar, resulting in strange side effects like C<ref \$_>
returning "CODE" in some instances.

C<lock &sub> is now a run-time error if L<threads::shared> is loaded (a
no-op otherwise), but that may be rectified in a future version.

=item *

The prototypes of several built-in functions--C<getprotobynumber>, C<lock>,
C<not> and C<select>--have been corrected, or at least are now closer to
reality than before.

=item *

Most dereferencing operators (C<${}>, etc.) used to call C<FETCH> twice on
a tied operand when doing a symbolic dereference (looking up a variable by
name, which is not permitted under C<use strict 'refs'>).  Only C<&{}> did
not have this problem.  This has been fixed.

=item *

A minor regression introduced in 5.15.0 has been fixed.  Dereferencing a
magical mortal (e.g., the return value of C<delete> on a tied hash element)
explicitly returned from a subroutine called recursively was not calling
C<FETCH>.  This would affect code like C<@{ foo() }> where the C<foo> sub
contains C<return delete $hash{elem}> and is calling itself.

=item *

A panic involving the combination of the regular expression modifiers
C</aa> and the C<\b> escape sequence introduced in 5.14.0 has been
fixed [perl #95964].

=item *

stat() would always return the inode number as an IV, even when the
original was unsigned, or too large to fit in an IV.  stat() now
returns the inode number as the type that would best preserve the
original value. [perl #84590]

=item *

The combination of the regular expression modifiers C</aa> and the C<\b>
and C<\B> escape sequences did not work properly on UTF-8 encoded
strings.  All non-ASCII characters under C</aa> should be treated as
non-word characters, but what was happening was that Unicode rules were
used to determine wordness/non-wordness for non-ASCII characters.  This
is now fixed [perl #95968].

=item *

Infinite loops like C<1 while 1> used to stop C<strict 'subs'> mode from
working for the rest of the block.t

=item *

The C<\h>, C<\H>, C<\v> and C<\V> regular expression metacharacters used to
cause a panic error message when attempting to match at the end of the
string [perl #96354].

=item *

For list assignments like C<($a,$b) = ($b,$a)>, Perl has to make a copy of
the items on the right-hand side before assignment them to the left.  For
efficiency's sake, it assigns the values on the right straight to the items
on the left no variable is mentioned on both sides, as in
C<($a,$b) = ($c,$d)>.  The logic for determining when it can cheat was
faulty, in that C<&&> and C<||> on the right-hand side could fool it.  So
C<($a,$b) = $some_true_value && ($b,$a)> would end up assigning the value
of C<$b> to both scalars.

=item *

Perl no longer tries to apply lvalue context to the string in
C<("string", $variable) ||= 1> (which used to be an error).  Since the
left-hand side of C<||=> is evaluated in scalar context, that's a scalar
comma operator, which gives all but the last item void context.  There is
no such thing as void lvalue context, so it was a mistake for Perl to try
to force it [perl #96942].

=item *

Every subroutine has a filename associated with it, that the debugger uses.
The one associated with constant subroutines used to be misallocated when
cloned under threads.  Consequently, debugging threaded applications could
result in memory corruption [perl #96126].

=item *

C<caller> no longer leaks memory when called from the DB package if
C<@DB::args> was assigned to after the first call to C<caller>.  L<Carp>
was triggering this bug [perl #97010].

=back

=head1 Acknowledgements

Perl 5.15.2 represents approximately 2 months of development since Perl
5.15.1 and contains approximately 17,000 lines of changes across 330
files from 35 authors.

Perl continues to flourish into its third decade thanks to a vibrant
community of users and developers. The following people are known to
have contributed the improvements that became Perl 5.15.2:

Abigail, Andreas König, brian d foy, Brian Greenfield, Chas. Owens,
Chris 'BinGOs' Williams, Craig A. Berry, David Golden, David Mitchell,
Eric Brine, Father Chrysostomos, Florian Ragwitz, Gerard Goossen,
H.Merijn Brand, Jesse Vincent, John Peacock, Karl Williamson, Karthik
Rajagopalan, Keith Thompson, Kevin Ryde, Matthew Horsfall, Mike
Sheldrake, Nicholas Clark, Niko Tyni, Reini Urban, Ricardo Signes,
Salvador Fandiño, Shlomi Fish, Spiros Denaxas, Steffen Müller, Stephen
Oberholtzer, Steve Hay, Tony Cook, Vincent Pit, Zefram.

The list above is almost certainly incomplete as it is automatically
generated from version control history. In particular, it does not
include the names of the (very much appreciated) contributors who
reported issues to the Perl bug tracker.

Many of the changes included in this version originated in the CPAN
modules included in Perl's core. We're grateful to the entire CPAN
community for helping Perl to flourish.

For a more complete list of all of Perl's historical contributors,
please see the F<AUTHORS> file in the Perl source distribution.

=head1 Reporting Bugs

If you find what you think is a bug, you might check the articles
recently posted to the comp.lang.perl.misc newsgroup and the perl
bug database at http://rt.perl.org/perlbug/ .  There may also be
information at http://www.perl.org/ , the Perl Home Page.

If you believe you have an unreported bug, please run the L<perlbug>
program included with your release.  Be sure to trim your bug down
to a tiny but sufficient test case.  Your bug report, along with the
output of C<perl -V>, will be sent off to perlbug@perl.org to be
analysed by the Perl porting team.

If the bug you are reporting has security implications, which make it
inappropriate to send to a publicly archived mailing list, then please send
it to perl5-security-report@perl.org. This points to a closed subscription
unarchived mailing list, which includes
all the core committers, who will be able
to help assess the impact of issues, figure out a resolution, and help
co-ordinate the release of patches to mitigate or fix the problem across all
platforms on which Perl is supported. Please only use this address for
security issues in the Perl core, not for modules independently
distributed on CPAN.

=head1 SEE ALSO

The F<Changes> file for an explanation of how to view exhaustive details
on what changed.

The F<INSTALL> file for how to build Perl.

The F<README> file for general stuff.

The F<Artistic> and F<Copying> files for copyright information.

=cut