modern core perl
DESCRIPTION
A presentation on Modern Core Perl that I gave at the London Perl Workshop on 12th November 2011TRANSCRIPT
![Page 2: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/2.jpg)
London Perl Workshop12th November 2011
2
What We Will Cover
Recent Perl releases 5.10 5.12 5.14 5.16
![Page 3: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/3.jpg)
London Perl Workshop12th November 2011
3
Perl Releases Perl 5 has moved to a regular release cycle Major release every year
− In Spring
Minor releases when required
![Page 4: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/4.jpg)
London Perl Workshop12th November 2011
4
Perl Version Numbers Even major numbers are production releases
− 5.10, 5.12, 5.14
Odd major numbers are dev releases− 5.9, 5.11, 5.13
![Page 5: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/5.jpg)
London Perl Workshop12th November 2011
5
Perl Support p5p provide support for current and previous
major releases− Currently 5.12 and 5.14
Further support may be available from distributors
![Page 6: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/6.jpg)
London Perl Workshop12th November 2011
6
Recent Perl Releases 5.10.0 – 2007 Dec 18 5.10.1 – 2009 Aug 22 5.12.0 – 2010 Apr 12 5.12.1 – 2010 May 16 5.12.2 – 2010 Sep 6 5.12.3 – 2011 Jan 21
![Page 7: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/7.jpg)
London Perl Workshop12th November 2011
7
Recent Perl Releases 5.14.0 – 2011 May 14 5.14.1 – 2011 Jun 16 5.12.4 – 2011 Jun 20 5.14.2 – 2011 Sep 26
![Page 8: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/8.jpg)
London Perl Workshop12th November 2011
8
Perl 5.10
Released 18th Dec 2007− Perl's 20th birthday
Many new features Well worth upgrading
![Page 9: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/9.jpg)
London Perl Workshop12th November 2011
9
New Features Defined-or operator Switch operator Smart matching say() Lexical $_
![Page 10: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/10.jpg)
London Perl Workshop12th November 2011
10
New Features
State variables Stacked file tests Regex improvements Many more
![Page 11: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/11.jpg)
London Perl Workshop12th November 2011
11
Defined Or Boolean expressions “short-circuit” $val = $val || $default;
$val ||= $default;
What if 0 is a valid value?
![Page 12: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/12.jpg)
London Perl Workshop12th November 2011
12
Defined Or Need to check “definedness” $val = defined $val ? $val : $default;
$val = $default unless defined $val;
![Page 13: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/13.jpg)
London Perl Workshop12th November 2011
13
Defined Or
The defined or operator makes this easier $val = $val // $default;
A different slant on truth Checks definedness Shortcircuit version too $val //= $value;
![Page 14: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/14.jpg)
London Perl Workshop12th November 2011
14
Switch Statement
Switch.pm was added with Perl 5.8 Source filter Parser limitations
− Regular expressions
− eval
5.10 introduces a build-in switch statement
![Page 15: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/15.jpg)
London Perl Workshop12th November 2011
15
Given ... When
Switch is spelled “given” Case is spelled “when” Powerful matching syntax
![Page 16: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/16.jpg)
London Perl Workshop12th November 2011
16
Given Example given ($foo) { when (/^abc/) { $abc = 1; } when (/^def/) { $def = 1; } when (/^xyz/) { $xyz = 1; } default { $nothing = 1; }}
![Page 17: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/17.jpg)
London Perl Workshop12th November 2011
17
New Keywords Four new keywords
− given
− when
− default
− continue
![Page 18: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/18.jpg)
London Perl Workshop12th November 2011
18
given
given(EXPR)
Assigns the result of EXPR to $_ within the following block
Similar to do { my $_ = EXPR; ... }
![Page 19: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/19.jpg)
London Perl Workshop12th November 2011
19
when
when (EXPR)
Uses smart matching to compare $_ with EXPR
Equivalent to when ($_ ~~ EXPR)
~~ is the new smart match operator Compares two values and “does the right
thing”
![Page 20: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/20.jpg)
London Perl Workshop12th November 2011
20
default
default defines a block that is executed if no when blocks match
default block is optional
![Page 21: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/21.jpg)
London Perl Workshop12th November 2011
21
continue
continue keyword falls through to the next when block
Normal behaviour is to break out of given block once the first when condition is matched
Inverse of most other programming languages
![Page 22: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/22.jpg)
London Perl Workshop12th November 2011
22
continue given($foo) { when (/x/) { say '$foo contains an x'; continue } when (/y/) { say '$foo contains a y' } default { say '$foo contains no x or y' }}
![Page 23: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/23.jpg)
London Perl Workshop12th November 2011
23
Smart Matching
~~ is the new Smart Match operator Different kinds of matches Dependent on the types of the operands See “perldoc perlsyn” for the full details Warning: Still under discussion
![Page 24: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/24.jpg)
London Perl Workshop12th November 2011
24
Smart Match Examples $foo ~~ $bar; # == or cmp
@foo ~~ $bar; # array contains value
%foo ~~ $bar; # hash key exists
$foo ~~ qr{$bar}; # regex match
@foo ~~ @bar; # arrays are identical
%foo ~~ %bar; # hash keys match
Many more alternatives
![Page 25: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/25.jpg)
London Perl Workshop12th November 2011
25
say()
say() is a new alternative to print() Adds a new line at the end of each call say($foo); # print $foo, “\n”;
Two characters shorter than print Less typing
![Page 26: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/26.jpg)
London Perl Workshop12th November 2011
26
Lexical $_
$_ is a package variable Always exists in main package Can lead to subtle bugs when not localised
correctly
Can now use my $_ to create a lexically scoped variable called $_
![Page 27: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/27.jpg)
London Perl Workshop12th November 2011
27
State Variables
Lexical variables disappear when their scope is destroyed
sub variables { my $x;
say ++$x;}
variables() for 1 .. 3;
![Page 28: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/28.jpg)
London Perl Workshop12th November 2011
28
State Variables State variables retain their value when their
scope is destroyed sub variables { state $x;
say ++$x;}
variables() for 1 .. 3;
![Page 29: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/29.jpg)
London Perl Workshop12th November 2011
29
State Variables Like static variables in C Deprecating bugs
− my $x if 0;
![Page 30: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/30.jpg)
London Perl Workshop12th November 2011
30
Stacked File Tests
People often think you can do this -f -w -x $file
Previously you couldn't Now you can Equivalent to -x $file && -w _ && -f _
![Page 31: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/31.jpg)
London Perl Workshop12th November 2011
31
Regex Improvements
Plenty of regular expression improvements Named capture buffers Possessive quantifiers Relative backreferences New escape sequences Many more
![Page 32: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/32.jpg)
London Perl Workshop12th November 2011
32
Named Capture Buffers
Variables $1, $2, etc change if the regex is altered
Named captures retain their names
(?<name> ... ) to define
Use new %+ hash to access them
![Page 33: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/33.jpg)
London Perl Workshop12th November 2011
33
Named Capture Example
while (<DATA>) { if (/(?<header>[\w\s]+) :\s+(?<value>.+)/x) { print "$+{header} -> "; print "$+{value}\n"; }}
![Page 34: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/34.jpg)
London Perl Workshop12th November 2011
34
Possessive Quantifiers
?+, *+, ++
Grab as much as they can Never give it back Finer control over backtracking 'aaaa' =~ /a++a/
Never matches
![Page 35: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/35.jpg)
London Perl Workshop12th November 2011
35
Relative Backreferences
\g{N}
More powerful version of \1, \2, etc
\g{1} is the same as \1
\g{-1} is the last capture buffer
\g{-2} is the one before that
![Page 36: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/36.jpg)
London Perl Workshop12th November 2011
36
New Escape Sequences
\h – Horizontal white space
\v – Vertical white space
Also \H and \V
![Page 37: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/37.jpg)
London Perl Workshop12th November 2011
37
Accessing New Features Some new features would break backwards
compatibility They are therefore turned off by default Various ways to turn them on
![Page 38: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/38.jpg)
London Perl Workshop12th November 2011
38
Feature Pragma Turn new features on with the feature
pragma use feature 'say';
use feature 'switch';
use feature 'state';
use feature ':5.10';
![Page 39: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/39.jpg)
London Perl Workshop12th November 2011
39
Implicit Loading
Two ways to automatically turn on 5.10 features
Require a high enough version of Perl use 5.10.0; # Or higher
-E command line option perl -e 'say “hello”'
perl -E 'say “hello”'
![Page 40: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/40.jpg)
London Perl Workshop12th November 2011
40
Perl 5.12
Released 12 April 2010− 5.12.4 20 June 2011
Many new enhancements
![Page 41: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/41.jpg)
London Perl Workshop12th November 2011
41
5.12 Enhancements package NAME VERSION syntax ... operator Implicit strictures Y2038 compliance
![Page 42: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/42.jpg)
London Perl Workshop12th November 2011
42
5.12 Enhancements Smart match changes New modules
− autodie
− parent
![Page 43: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/43.jpg)
London Perl Workshop12th November 2011
43
package NAME VER Declare the version of a package in the
package declaration package My::Package 1.23;
Equivalent to package My::Package;our $VERSION = 1.23;
![Page 44: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/44.jpg)
London Perl Workshop12th November 2011
44
... Operator Called the “yada-yada” operator Used to stand in for unwritten code sub unimplemented { ...}
Code compiles Throws an “unimplemented” exception
when run
![Page 45: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/45.jpg)
London Perl Workshop12th November 2011
45
Implicit Strictures Requiring a version of Perl greater than 5.11
implicitly turns on use strict use 5.12.0;
Is equivalent to use strict;use feature ':5.12';
![Page 46: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/46.jpg)
London Perl Workshop12th November 2011
46
Y2038 Compliance Core time functions are now Y2038
compliant
![Page 47: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/47.jpg)
London Perl Workshop12th November 2011
47
Smart Match Changes Some changes to Smart Match operator No longer commutative See new table in perlsyn Still in flux!
![Page 48: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/48.jpg)
London Perl Workshop12th November 2011
48
New Modules Some new modules in the standard
distribution autodie parent
− Better version of base.
![Page 49: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/49.jpg)
London Perl Workshop12th November 2011
49
Perl 5.14
Released 14 May 2011− 5.14.2 26 Sept 2011
Many new enhancements
![Page 50: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/50.jpg)
London Perl Workshop12th November 2011
50
5.14 Enhancements
Non-destructive substitution Container functions accept references Package block New modules
![Page 51: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/51.jpg)
London Perl Workshop12th November 2011
51
Non-destructive substitution
New /r option on s/// and tr/// Copies input Acts on copy Original unmodifed $_ = 'cat';$new = s/cat/dog/r'; # $_ remains 'cat'
![Page 52: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/52.jpg)
London Perl Workshop12th November 2011
52
Container functions accept references
Array & hash functions used to require arrays or hashes
− push @array, $value
− @keys = keys %hash
Even if you have a reference− push @$arrayref, $value
− @keys = keys %$hashref
![Page 53: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/53.jpg)
London Perl Workshop12th November 2011
53
Container functions accept references
Array & hash functions now accept references
− push $array_ref, $value
− @keys = keys $hash_ref
Currently experimental
![Page 54: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/54.jpg)
London Perl Workshop12th November 2011
54
Package block Attach a code block to a package declaration package MyPackage { ... }
Equivalent to { package MyPackage; ... }
Can also declare a version package MyPackage 1.23 { ... }
![Page 55: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/55.jpg)
London Perl Workshop12th November 2011
55
New Modules Many modules for parsing META files CPAN::Meta::YAML & JSON::PP CPAN::Meta CPAN::Meta::Spec & CPAN::Meta::History Module::Metadata
![Page 56: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/56.jpg)
London Perl Workshop12th November 2011
56
New Modules Other new modules HTTP::Tiny Perl::OSType Version::Requirements
![Page 57: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/57.jpg)
London Perl Workshop12th November 2011
57
Perl 5.16 Due in spring 2012 Currently in development at 5.15
− 5.15.3 – 2011 Sep 21
− Code freeze – 2011 Dec 20
![Page 58: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/58.jpg)
London Perl Workshop12th November 2011
58
Perl 5.16 Look for changes in perldelta
− perl5150delta
− perl5151delta
− perl5152delta
− perl5153delta
![Page 59: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/59.jpg)
London Perl Workshop12th November 2011
59
Some Highlights CORE on all keywords Continue outside switch Breakpoints with filenames Remove Perl 4 *.pl
![Page 60: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/60.jpg)
London Perl Workshop12th November 2011
60
More Information perldoc perl5100delta perldoc perl5120delta perldoc perl5140delta
![Page 61: Modern Core Perl](https://reader034.vdocuments.us/reader034/viewer/2022051211/554f4169b4c905cd048b5458/html5/thumbnails/61.jpg)
That's all folksThat's all folks
• Any questions?