Modern Core Perl
Upcoming SlideShare
Loading in...5
×
 

Modern Core Perl

on

  • 11,656 views

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

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

Statistics

Views

Total Views
11,656
Views on SlideShare
6,340
Embed Views
5,316

Actions

Likes
6
Downloads
105
Comments
1

14 Embeds 5,316

http://onperl.ru 1927
http://perlhacks.com 1905
http://planetperl.ru 967
http://www.onperl.ru 356
http://www.planetperl.ru 65
http://dave.org.uk 53
http://www.dave.org.uk 14
http://feeds.feedburner.com 12
http://perlhacks.org 9
http://davorg.theplanetarium.org 3
http://translate.googleusercontent.com 2
http://webcache.googleusercontent.com 1
http://paper.li 1
http://digg.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Modern Core Perl Presentation Transcript

  • 1. Modern Core Perl Dave Cross Magnum Solutions Ltd dave@mag-sol.com
  • 2. What We Will Cover  Recent Perl releases  5.10  5.12  5.14  5.16 2London Perl Workshop 12th November 2011
  • 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. 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. 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. 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. 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. Perl 5.10  Released 18th Dec 2007 − Perls 20th birthday  Many new features  Well worth upgrading 8London Perl Workshop 12th November 2011
  • 9. New Features  Defined-or operator  Switch operator  Smart matching  say()  Lexical $_ 9London Perl Workshop 12th November 2011
  • 10. New Features  State variables  Stacked file tests  Regex improvements  Many more 10London Perl Workshop 12th November 2011
  • 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. Defined Or  Need to check “definedness”  $val = defined $val ? $val : $default;  $val = $default unless defined $val; 12London Perl Workshop 12th 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; 13London Perl Workshop 12th 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 14London Perl Workshop 12th November 2011
  • 15. Given ... When  Switch is spelled “given”  Case is spelled “when”  Powerful matching syntax 15London Perl Workshop 12th November 2011
  • 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. New Keywords  Four new keywords − given − when − default − continue 17London Perl Workshop 12th November 2011
  • 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. 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. default  default defines a block that is executed if no when blocks match  default block is optional 20London Perl Workshop 12th 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 21London Perl Workshop 12th 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 } } 22London Perl Workshop 12th 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 23London Perl Workshop 12th 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 24London Perl Workshop 12th 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 25London Perl Workshop 12th 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 $_ 26London Perl Workshop 12th November 2011
  • 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. 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. State Variables  Like static variables in C  Deprecating bugs − my $x if 0; 29London Perl Workshop 12th November 2011
  • 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. 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. 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. Named Capture Example  while (<DATA>) { if (/(?<header>[ws]+) :s+(?<value>.+)/x) { print "$+{header} -> "; print "$+{value}n"; } } 33London Perl Workshop 12th November 2011
  • 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. 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. New Escape Sequences  h – Horizontal white space  v – Vertical white space  Also H and V 36London Perl Workshop 12th 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 37London Perl Workshop 12th 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; 38London Perl Workshop 12th 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” 39London Perl Workshop 12th November 2011
  • 40. Perl 5.12  Released 12 April 2010 − 5.12.4 20 June 2011  Many new enhancements 40London Perl Workshop 12th November 2011
  • 41. 5.12 Enhancements  package NAME VERSION syntax  ... operator  Implicit strictures  Y2038 compliance 41London Perl Workshop 12th November 2011
  • 42. 5.12 Enhancements  Smart match changes  New modules − autodie − parent 42London Perl Workshop 12th 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; 43London Perl Workshop 12th 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 44London Perl Workshop 12th 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; 45London Perl Workshop 12th November 2011
  • 46. Y2038 Compliance  Core time functions are now Y2038 compliant 46London Perl Workshop 12th November 2011
  • 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. New Modules  Some new modules in the standard distribution  autodie  parent − Better version of base. 48London Perl Workshop 12th November 2011
  • 49. Perl 5.14  Released 14 May 2011 − 5.14.2 26 Sept 2011  Many new enhancements 49London Perl Workshop 12th November 2011
  • 50. 5.14 Enhancements  Non-destructive substitution  Container functions accept references  Package block  New modules 50London Perl Workshop 12th 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 51London Perl Workshop 12th 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 52London Perl Workshop 12th November 2011
  • 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. 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. 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. New Modules  Other new modules  HTTP::Tiny  Perl::OSType  Version::Requirements 56London Perl Workshop 12th 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 57London Perl Workshop 12th November 2011
  • 58. Perl 5.16  Look for changes in perldelta − perl5150delta − perl5151delta − perl5152delta − perl5153delta 58London Perl Workshop 12th November 2011
  • 59. Some Highlights  CORE on all keywords  Continue outside switch  Breakpoints with filenames  Remove Perl 4 *.pl 59London Perl Workshop 12th November 2011
  • 60. More Information  perldoc perl5100delta  perldoc perl5120delta  perldoc perl5140delta 60London Perl Workshop 12th November 2011
  • 61. Thats all folks• Any questions?