Modern Core Perl        Dave Cross   Magnum Solutions Ltd    dave@mag-sol.com
What We Will Cover          Recent Perl releases          5.10          5.12          5.14          5.16             ...
Perl Releases          Perl 5 has moved to a regular release cycle          Major release every year             −   In ...
Perl Version Numbers          Even major numbers are production releases             −   5.10, 5.12, 5.14          Odd m...
Perl Support          p5p provide support for current and previous           major releases             −   Currently 5.1...
Recent Perl Releases          5.10.0 – 2007 Dec 18          5.10.1 – 2009 Aug 22          5.12.0 – 2010 Apr 12        ...
Recent Perl Releases          5.14.0 – 2011 May 14          5.14.1 – 2011 Jun 16          5.12.4 – 2011 Jun 20        ...
Perl 5.10          Released 18th Dec 2007             −   Perls 20th birthday          Many new features          Well ...
New Features          Defined-or operator          Switch operator          Smart matching          say()          Le...
New Features          State variables          Stacked file tests          Regex improvements          Many more      ...
Defined Or          Boolean expressions “short-circuit”          $val = $val || $default;          $val ||= $default;  ...
Defined Or          Need to check “definedness”          $val = defined $val                       ? $val : $default;   ...
Defined Or          The defined or operator makes this easier          $val = $val // $default;          A different sl...
Switch Statement          Switch.pm was added with Perl 5.8          Source filter          Parser limitations         ...
Given ... When          Switch is spelled “given”          Case is spelled “when”          Powerful matching syntax    ...
Given Example          given ($foo) {               when (/^abc/) { $abc   = 1; }               when (/^def/) { $def   = ...
New Keywords          Four new keywords             −   given             −   when             −   default             − ...
given          given(EXPR)          Assigns the result of EXPR to $_ within the           following block          Simi...
when          when (EXPR)          Uses smart matching to compare $_ with           EXPR          Equivalent to when ($...
default          default defines a block that is executed if no           when blocks match          default block is op...
continue          continue keyword falls through to the next           when block          Normal behaviour is to break ...
continue          given($foo) {             when (/x/)               { say $foo contains an x;                 continue }...
Smart Matching          ~~ is the new Smart Match operator          Different kinds of matches          Dependent on th...
Smart Match Examples          $foo ~~ $bar; # == or cmp          @foo ~~ $bar; # array contains value          %foo ~~ ...
say()          say() is a new alternative to print()          Adds a new line at the end of each call          say($foo...
Lexical $_          $_ is a package variable          Always exists in main package          Can lead to subtle bugs wh...
State Variables          Lexical variables disappear when their scope           is destroyed          sub variables {   ...
State Variables          State variables retain their value when their           scope is destroyed          sub variabl...
State Variables          Like static variables in C          Deprecating bugs             −   my $x if 0;               ...
Stacked File Tests          People often think you can do this          -f -w -x $file          Previously you couldnt ...
Regex Improvements          Plenty of regular expression improvements          Named capture buffers          Possessiv...
Named Capture Buffers          Variables $1, $2, etc change if the regex is           altered          Named captures re...
Named Capture Example          while (<DATA>) {             if (/(?<header>[ws]+)                 :s+(?<value>.+)/x) {   ...
Possessive Quantifiers          ?+, *+, ++          Grab as much as they can          Never give it back          Fine...
Relative Backreferences          g{N}          More powerful version of 1, 2, etc          g{1} is the same as 1       ...
New Escape Sequences          h – Horizontal white space          v – Vertical white space          Also H and V       ...
Accessing New Features          Some new features would break backwards           compatibility          They are theref...
Feature Pragma          Turn new features on with the feature           pragma          use feature say;          use f...
Implicit Loading          Two ways to automatically turn on 5.10           features          Require a high enough versi...
Perl 5.12          Released 12 April 2010             −   5.12.4 20 June 2011          Many new enhancements            ...
5.12 Enhancements          package NAME VERSION syntax          ... operator          Implicit strictures          Y20...
5.12 Enhancements          Smart match changes          New modules             −   autodie             −   parent      ...
package NAME VER          Declare the version of a package in the           package declaration          package My::Pac...
... Operator          Called the “yada-yada” operator          Used to stand in for unwritten code          sub unimple...
Implicit Strictures          Requiring a version of Perl greater than 5.11           implicitly turns on use strict      ...
Y2038 Compliance          Core time functions are now Y2038           compliant                                          ...
Smart Match Changes          Some changes to Smart Match operator          No longer commutative          See new table...
New Modules          Some new modules in the standard           distribution          autodie          parent          ...
Perl 5.14          Released 14 May 2011             −   5.14.2 26 Sept 2011          Many new enhancements              ...
5.14 Enhancements          Non-destructive substitution          Container functions accept references          Package...
Non-destructive                        substitution          New /r option on s/// and tr///          Copies input      ...
Container functions                 accept references          Array & hash functions used to require           arrays or...
Container functions                 accept references          Array & hash functions now accept           references    ...
Package block         Attach a code block to a package declaration         package MyPackage { ... }         Equivalent...
New Modules         Many modules for parsing META files         CPAN::Meta::YAML & JSON::PP         CPAN::Meta        ...
New Modules         Other new modules         HTTP::Tiny         Perl::OSType         Version::Requirements           ...
Perl 5.16          Due in spring 2012          Currently in development at 5.15             −   5.15.3 – 2011 Sep 21    ...
Perl 5.16          Look for changes in perldelta             −   perl5150delta             −   perl5151delta             ...
Some Highlights          CORE on all keywords          Continue outside switch          Breakpoints with filenames     ...
More Information          perldoc perl5100delta          perldoc perl5120delta          perldoc perl5140delta          ...
Thats all folks• Any questions?
Upcoming SlideShare
Loading in...5
×

Modern Core Perl

12,059

Published on

A presentation on Modern Core Perl that I gave at the London Perl Workshop on 12th November 2011

Published in: Technology
1 Comment
6 Likes
Statistics
Notes
No Downloads
Views
Total Views
12,059
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
118
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide

Modern Core Perl

  1. 1. Modern Core Perl Dave Cross Magnum Solutions Ltd dave@mag-sol.com
  2. 2. What We Will Cover  Recent Perl releases  5.10  5.12  5.14  5.16 2London Perl Workshop 12th November 2011
  3. 3. Perl Releases  Perl 5 has moved to a regular release cycle  Major release every year − In Spring  Minor releases when required 3London Perl Workshop 12th November 2011
  4. 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 4London Perl Workshop 12th November 2011
  5. 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 5London Perl Workshop 12th November 2011
  6. 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 6London Perl Workshop 12th November 2011
  7. 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 7London Perl Workshop 12th November 2011
  8. 8. Perl 5.10  Released 18th Dec 2007 − Perls 20th birthday  Many new features  Well worth upgrading 8London Perl Workshop 12th November 2011
  9. 9. New Features  Defined-or operator  Switch operator  Smart matching  say()  Lexical $_ 9London Perl Workshop 12th November 2011
  10. 10. New Features  State variables  Stacked file tests  Regex improvements  Many more 10London Perl Workshop 12th November 2011
  11. 11. Defined Or  Boolean expressions “short-circuit”  $val = $val || $default;  $val ||= $default;  What if 0 is a valid value? 11London Perl Workshop 12th November 2011
  12. 12. Defined Or  Need to check “definedness”  $val = defined $val ? $val : $default;  $val = $default unless defined $val; 12London Perl Workshop 12th November 2011
  13. 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; 13London Perl Workshop 12th November 2011
  14. 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 14London Perl Workshop 12th November 2011
  15. 15. Given ... When  Switch is spelled “given”  Case is spelled “when”  Powerful matching syntax 15London Perl Workshop 12th November 2011
  16. 16. Given Example  given ($foo) { when (/^abc/) { $abc = 1; } when (/^def/) { $def = 1; } when (/^xyz/) { $xyz = 1; } default { $nothing = 1; } } 16London Perl Workshop 12th November 2011
  17. 17. New Keywords  Four new keywords − given − when − default − continue 17London Perl Workshop 12th November 2011
  18. 18. given  given(EXPR)  Assigns the result of EXPR to $_ within the following block  Similar to do { my $_ = EXPR; ... } 18London Perl Workshop 12th November 2011
  19. 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” 19London Perl Workshop 12th November 2011
  20. 20. default  default defines a block that is executed if no when blocks match  default block is optional 20London Perl Workshop 12th November 2011
  21. 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 21London Perl Workshop 12th November 2011
  22. 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 } } 22London Perl Workshop 12th November 2011
  23. 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 23London Perl Workshop 12th November 2011
  24. 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 24London Perl Workshop 12th November 2011
  25. 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 25London Perl Workshop 12th November 2011
  26. 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 $_ 26London Perl Workshop 12th November 2011
  27. 27. State Variables  Lexical variables disappear when their scope is destroyed  sub variables { my $x; say ++$x; } variables() for 1 .. 3; 27London Perl Workshop 12th November 2011
  28. 28. State Variables  State variables retain their value when their scope is destroyed  sub variables { state $x; say ++$x; } variables() for 1 .. 3; 28London Perl Workshop 12th November 2011
  29. 29. State Variables  Like static variables in C  Deprecating bugs − my $x if 0; 29London Perl Workshop 12th November 2011
  30. 30. Stacked File Tests  People often think you can do this  -f -w -x $file  Previously you couldnt  Now you can  Equivalent to  -x $file && -w _ && -f _ 30London Perl Workshop 12th November 2011
  31. 31. Regex Improvements  Plenty of regular expression improvements  Named capture buffers  Possessive quantifiers  Relative backreferences  New escape sequences  Many more 31London Perl Workshop 12th November 2011
  32. 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 32London Perl Workshop 12th November 2011
  33. 33. Named Capture Example  while (<DATA>) { if (/(?<header>[ws]+) :s+(?<value>.+)/x) { print "$+{header} -> "; print "$+{value}n"; } } 33London Perl Workshop 12th November 2011
  34. 34. Possessive Quantifiers  ?+, *+, ++  Grab as much as they can  Never give it back  Finer control over backtracking  aaaa =~ /a++a/  Never matches 34London Perl Workshop 12th November 2011
  35. 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 35London Perl Workshop 12th November 2011
  36. 36. New Escape Sequences  h – Horizontal white space  v – Vertical white space  Also H and V 36London Perl Workshop 12th November 2011
  37. 37. Accessing New Features  Some new features would break backwards compatibility  They are therefore turned off by default  Various ways to turn them on 37London Perl Workshop 12th November 2011
  38. 38. Feature Pragma  Turn new features on with the feature pragma  use feature say;  use feature switch;  use feature state;  use feature :5.10; 38London Perl Workshop 12th November 2011
  39. 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” 39London Perl Workshop 12th November 2011
  40. 40. Perl 5.12  Released 12 April 2010 − 5.12.4 20 June 2011  Many new enhancements 40London Perl Workshop 12th November 2011
  41. 41. 5.12 Enhancements  package NAME VERSION syntax  ... operator  Implicit strictures  Y2038 compliance 41London Perl Workshop 12th November 2011
  42. 42. 5.12 Enhancements  Smart match changes  New modules − autodie − parent 42London Perl Workshop 12th November 2011
  43. 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; 43London Perl Workshop 12th November 2011
  44. 44. ... Operator  Called the “yada-yada” operator  Used to stand in for unwritten code  sub unimplemented { ... }  Code compiles  Throws an “unimplemented” exception when run 44London Perl Workshop 12th November 2011
  45. 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; 45London Perl Workshop 12th November 2011
  46. 46. Y2038 Compliance  Core time functions are now Y2038 compliant 46London Perl Workshop 12th November 2011
  47. 47. Smart Match Changes  Some changes to Smart Match operator  No longer commutative  See new table in perlsyn  Still in flux! 47London Perl Workshop 12th November 2011
  48. 48. New Modules  Some new modules in the standard distribution  autodie  parent − Better version of base. 48London Perl Workshop 12th November 2011
  49. 49. Perl 5.14  Released 14 May 2011 − 5.14.2 26 Sept 2011  Many new enhancements 49London Perl Workshop 12th November 2011
  50. 50. 5.14 Enhancements  Non-destructive substitution  Container functions accept references  Package block  New modules 50London Perl Workshop 12th November 2011
  51. 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 51London Perl Workshop 12th November 2011
  52. 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 52London Perl Workshop 12th November 2011
  53. 53. Container functions accept references  Array & hash functions now accept references − push $array_ref, $value − @keys = keys $hash_ref  Currently experimental 53London Perl Workshop 12th November 2011
  54. 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 { ... } 54London Perl Workshop 12th November 2011
  55. 55. New Modules  Many modules for parsing META files  CPAN::Meta::YAML & JSON::PP  CPAN::Meta  CPAN::Meta::Spec & CPAN::Meta::History  Module::Metadata 55London Perl Workshop 12th November 2011
  56. 56. New Modules  Other new modules  HTTP::Tiny  Perl::OSType  Version::Requirements 56London Perl Workshop 12th November 2011
  57. 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 57London Perl Workshop 12th November 2011
  58. 58. Perl 5.16  Look for changes in perldelta − perl5150delta − perl5151delta − perl5152delta − perl5153delta 58London Perl Workshop 12th November 2011
  59. 59. Some Highlights  CORE on all keywords  Continue outside switch  Breakpoints with filenames  Remove Perl 4 *.pl 59London Perl Workshop 12th November 2011
  60. 60. More Information  perldoc perl5100delta  perldoc perl5120delta  perldoc perl5140delta 60London Perl Workshop 12th November 2011
  61. 61. Thats all folks• Any questions?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×