[Melbourne-pm] What's new in Perl 5.18?
Jacinta Richardson
jarich at perltraining.com.au
Mon Jun 3 19:36:12 PDT 2013
As announced recently, Perl 5.18 is out. You might be wondering what
has changed? Well yesterday I wrote a Perl tip on all the changes that
I thought were interesting. I've included it below.
I'm also running a Programming Perl course in Melbourne in two weeks
time (17th - 21st June). I'm currently offering a discount of $500 per
person, or $750 per person for bookings of 3 or more attendees (for
bookings made by 3pm Friday 7th). Contact me for more information.
All the best,
Jacinta
==== What's new in 5.18.0? ====
Perl 5's yearly release rhythm is well established. Because major
releases come out every single year, a major release no longer
introduces a slew of new features. Instead, it consists of a
smaller set
of features and bug fixes. Upgrading to a new major version is easier
than it's ever been.
On 18th May 2013, Perl 5.18.0 was released.
What has changed?
== More information ==
In addition to this tip you may find it useful to read
(http://search.cpan.org/dist/perl-5.18.0/pod/perldelta.pod) the
perldelta document as well as our earlier tip on
(http://perltraining.com.au/tips/2012-08-08.html) What's New in
5.12, 5.14 and 5.16
== Smart-match, given/when, lexical $_ all moved to experimental ==
There's now a new warnings category called "experimental". If you
use an
experimental feature without disabling that warning, you'll be told
it's
experimental. This allows developers to introduce new ideas and see
whether they end up with unexpected consequences. Things that work will
be removed from being experimental in a later release.
On the other hand, some ideas that have ended up with much confusion
have been marked as experimental until this confusion is clarified.
Due to various special-casing, smart-match (and given/when as a
result) and
separately, lexical $_ have been marked as experimental. Turn off
these
warnings with the following:
no warnings "experimental::smartmatch";
no warnings "experimental::lexical_topic";
or
no warnings qw(experimental::smartmatch experimental::lexical_topic);
The special warnings IDs for each experimental feature, are included
with their warnings in
(http://search.cpan.org/dist/perl-5.18.0/pod/perldiag.pod) perldiag.
== Hash overhaul ==
In brief, hash ordering is now actually random for all hashes (as we've
been told for a long while, but which hasn't always been strictly the
case). Thus:
my %hash1 = ( a => 1, b => 2, c => 3);
my %hash2 = %hash1;
say join " ", keys %hash1;
say join " ", keys %hash2;
would have previously printed out identical key ordering for both
hashes
during each program run. This will no longer occur.
== Unicode ==
Perl now supports Unicode 6.2.
You can also define your own names for characters for use in ``\N{}'',
although if you begin a name with a digit or include commas in the name
etc, then that's a syntax error.
= Set operations =
You can do set operations (such as intersection) within regular
expressions character classes, for example:
no warnings "experimental::regex_sets";
/(?[ \p{Thai} & \p{Digit} ])/
will match all the characters that are in the Thai script and are also
digits. It's experimental, so you may want to turn the warning off.
Sets can be combined further:
/(?[ ( \p{Thai} + \p{Lao} ) & \p{Digit} ])
The union of Thai and Lao scripts intersected with digits gives us all
digits in Thai and Lao scripts.
See more at
(http://search.cpan.org/~rjbs/perl-5.18.0/pod/perlrecharclass.pod#
Extended_Bracketed_Character_Classes
<http://search.cpan.org/%7Erjbs/perl-5.18.0/pod/perlrecharclass.pod#Extended_Bracketed_Character_Classes>)
perlrecharclass.
== $^{LAST_FH} ==
Should you ever want access to most recently read filename, you can now
use $^{LAST_FH}
# read a line from a random (hopefully opened) file handle
my $string = < $file_handles[ rand @file_hands ] >;
# oops, too short, let's add another line from that file, too
if( length $string < MAX_LEN ) {
$string .= < $^{LAST_FH} >;
}
== Lexical subroutine ==
It's been possible to create lexical subroutines of a type using
subroutine references:
my $sub = sub {
...
};
$sub->();
Now it's possible (experimentally) to create lexical, shared and static
subroutines directly that are only available within the appropriate
scope and only after that declaration:
no warnings "experimental::lexical_subs";
use feature 'lexical_subs';
my sub lexical { ... }
our sub shared { ... }
state sub static { ... }
For more check out
(http://search.cpan.org/~rjbs/perl-5.18.0/pod/perlsub.pod#
Lexical_Subroutines
<http://search.cpan.org/%7Erjbs/perl-5.18.0/pod/perlsub.pod#Lexical_Subroutines>)
perlsub.
== Neat fixes ==
= qw(...) can no longer be used as parentheses =
You can no longer write:
foreach my $foo qw(a b c d e) {
...
}
you must now enclose the ``qw()'' within quotes:
foreach my $foo ( qw(a b c d e) ) {
...
}
= require dies for unreadable files =
Previously if you attempted to ``require'' a file and there wasn't a
readable file of that name in your specified location, ``require''
would
ignore the file and search @INC. Now it does not.
== Other things ==
There are a few module changes, deprecations and selected bug-fixes as
well. Check the
(http://search.cpan.org/dist/perl-5.18.0/pod/perldelta.pod
<http://search.cpan.org/dist/perl-5.18.0/pod/perldelta.pod>)
perldelta document for more.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/melbourne-pm/attachments/20130604/9d30a38e/attachment.html>
More information about the Melbourne-pm
mailing list