Perl 5.12 for Everyday Use

Preview:

DESCRIPTION

 

Citation preview

Perl 5.12for everyday use

Sunday, December 5, 2010

perl5100delta

5.12 isn’t like 5.10

Sunday, December 5, 2010

perl5100delta

5.12 isn’t like 5.10

- after 5.8, we had to wait 5 years for 5.10

Sunday, December 5, 2010

perl5100delta

5.12 isn’t like 5.10

- after 5.8, we had to wait 5 years for 5.10

- 5.12 came out 2 years after 5.10

Sunday, December 5, 2010

perl5100delta

5.12 is a Nice Change

Sunday, December 5, 2010

perl5100delta

5.12 is a Nice Change

- 5.10 was a huge set of changes

Sunday, December 5, 2010

perl5100delta

5.12 is a Nice Change

- 5.10 was a huge set of changes

- 5.12 is a lot smaller

Sunday, December 5, 2010

perl5100delta

5.12 is a Nice Change

- 5.10 was a huge set of changes

- 5.12 is a lot smaller

- 5.12 is not as compelling as 5.10

Sunday, December 5, 2010

perl5100delta

5.12 is a Nice Change

- 5.10 was a huge set of changes

- 5.12 is a lot smaller

- 5.12 is not as compelling as 5.10

- and that’s a good thing

Sunday, December 5, 2010

perl5100delta

5.12 is a Mixed Bag

Sunday, December 5, 2010

perl5100delta

5.12 is a Mixed Bag

- this talk isn’t just for beginners

Sunday, December 5, 2010

perl5100delta

5.12 is a Mixed Bag

- this talk isn’t just for beginners

- some of these changes are at the edges

Sunday, December 5, 2010

perl5100delta

5.12 is a Mixed Bag

- this talk isn’t just for beginners

- some of these changes are at the edges

- but they’re all practical

Sunday, December 5, 2010

perl5100delta

5.12 is a Mixed Bag

- this talk isn’t just for beginners

- some of these changes are at the edges

- but they’re all practical

- except for the ones that aren’t

Sunday, December 5, 2010

perl5132delta

By the way, 5.14...

Sunday, December 5, 2010

perl5132delta

By the way, 5.14...

- is going to be awesome

Sunday, December 5, 2010

perl5132delta

By the way, 5.14...

- is going to be awesome

- and available in about nine months

Sunday, December 5, 2010

perl5132delta

By the way, 5.14...

- is going to be awesome

- and available in about nine months

- and it’s going to be awesome

Sunday, December 5, 2010

perl5101delta

...and 5.10 is frozen.

Sunday, December 5, 2010

perl5101delta

...and 5.10 is frozen.

- 5.10 is the last release of the old way

Sunday, December 5, 2010

perl5101delta

...and 5.10 is frozen.

- 5.10 is the last release of the old way

- that means it got some features backported

Sunday, December 5, 2010

perl5101delta

...and 5.10 is frozen.

- 5.10 is the last release of the old way

- that means it got some features backported

- that will never happen again

Sunday, December 5, 2010

perl5101delta

...and 5.10 is frozen.

- 5.10 is the last release of the old way

- that means it got some features backported

- that will never happen again

- I’ll point out 5.12isms that got into 5.10.1

Sunday, December 5, 2010

but enough about other versions

Sunday, December 5, 2010

let’s talk about 5.12

Sunday, December 5, 2010

feature

First: A Warning

Sunday, December 5, 2010

feature

First: A Warning

- 5.12 is backwards compatible

Sunday, December 5, 2010

feature

First: A Warning

- 5.12 is backwards compatible

- but adds new keywords and operators

Sunday, December 5, 2010

feature

First: A Warning

- 5.12 is backwards compatible

- but adds new keywords and operators

- they’re not enabled by default

Sunday, December 5, 2010

feature

First: A Warning

- 5.12 is backwards compatible

- but adds new keywords and operators

- they’re not enabled by default

- use feature ‘mtfnpy’;

Sunday, December 5, 2010

feature

First: A Warning

- 5.12 is backwards compatible

- but adds new keywords and operators

- they’re not enabled by default

- use feature ‘mtfnpy’;

- use 5.012;

Sunday, December 5, 2010

feature

First: A Warning

- 5.12 is backwards compatible

- but adds new keywords and operators

- they’re not enabled by default

- use feature ‘mtfnpy’;

- use 5.012;

- read the perldoc

Sunday, December 5, 2010

feature

First: A Warning

- 5.12 is backwards compatible

- but adds new keywords and operators

- they’re not enabled by default

- use feature ‘mtfnpy’;

- use 5.012;

- read the perldoc I’m a perldoc ref!

Sunday, December 5, 2010

feature

First: A Warning

- 5.12 is backwards compatible

- but adds new keywords and operators

- they’re not enabled by default

- use feature ‘mtfnpy’;

- use 5.012;

- read the perldoc

Sunday, December 5, 2010

perlsyn

- the smart match operator changed

$old ~~ $new

also in 5.10.1

Sunday, December 5, 2010

perldoc

~~

- no longer commutative; right side wins

- non-overloaded objects can’t be ~~ed

- still very complicated (23 behaviors)

- you won’t be using this every day

Sunday, December 5, 2010

autodie

autodie

also in 5.10.1

Sunday, December 5, 2010

autodie

autodie

- like Fatal

also in 5.10.1

Sunday, December 5, 2010

autodie

autodie

- like Fatal

- but deadlier

also in 5.10.1

Sunday, December 5, 2010

autodie

autodie

open my $fh, ‘>‘, $filename;

while (<$fh>) { ...}

close $fh;

Sunday, December 5, 2010

autodie

autodie

open my $fh, ‘>‘, $filename or die “couldn’t open $filename: $!”;

while (<$fh>) { ...}

close $fh or die “couldn’t close $filename: $!”;

Sunday, December 5, 2010

autodie

autodie

use autodie;

open my $fh, ‘<‘, $filename;

while (<$fh>) { ...}

close $fh;

Sunday, December 5, 2010

autodie

autodie

use autodie;

open my $fh, ‘>‘, $filename;

while (<$fh>) { no autodie; rmdir or warn “couldn’t remove $_: $!”;}

close $fh;

Sunday, December 5, 2010

perldoc

autodie problems

- autodie doesn’t affect print

- you must close filehandles explicitly

Sunday, December 5, 2010

Unicode

Sunday, December 5, 2010

perlunicode

Perl is Good at Unicode

Sunday, December 5, 2010

perlunicode

Perl 5.12 is Better

Sunday, December 5, 2010

perlunicode

Perl 5.12 is Better

- Unicode 5.2

Sunday, December 5, 2010

perlunicode

Perl 5.12 is Better

- Unicode 5.2

- every character property is available

Sunday, December 5, 2010

perlunicode

Perl 5.12 is Better

- Unicode 5.2

- every character property is available

- \X in regex is more sensible

Sunday, December 5, 2010

perlunicode

“The Unicode Bug”

Sunday, December 5, 2010

perlunicode

“The Unicode Bug”

- strings aren’t always treated as Unicode

Sunday, December 5, 2010

perlunicode

“The Unicode Bug”

- strings aren’t always treated as Unicode

- this causes weird bugs that take ages to find

Sunday, December 5, 2010

perlunicode

“The Unicode Bug”

- strings aren’t always treated as Unicode

- this causes weird bugs that take ages to find

- use feature ‘unicode_strings’;

Sunday, December 5, 2010

perldoc

use feature ‘unicode_strings’;

Sunday, December 5, 2010

perldoc

use 5.12.0;

Sunday, December 5, 2010

perldoc

use 5.10.0;

Sunday, December 5, 2010

perldoc

use 5.10.0;

use feature qw( say state switch);

Sunday, December 5, 2010

perldoc

use 5.12.0;

Sunday, December 5, 2010

perldoc

use 5.12.0;

use feature qw( say state switch unicode_strings);

Sunday, December 5, 2010

perldoc

use 5.12.0;

use feature qw( say state switch unicode_strings);

use strict;

Sunday, December 5, 2010

Container Improvements

Sunday, December 5, 2010

my %hash = (a => 1, b => 2);

while (my ($k, $v) = each %hash) { say “value for $k is $v”;}

Sunday, December 5, 2010

my %hash = (a => 1, b => 2);

while (my ($k, $v) = each %hash) { say “value for $k is $v”;}

value for a is 1value for b is 2

Sunday, December 5, 2010

Sunday, December 5, 2010

my @array = qw(a b);

Sunday, December 5, 2010

my @array = qw(a b);

value for 0 is bvalue for 1 is a

Sunday, December 5, 2010

my @array = qw(a b);

for my $k (0 .. $#array) { say “value for $k is $array[$k]”;}

value for 0 is bvalue for 1 is a

Sunday, December 5, 2010

my @array = qw(a b);

while (my ($k, $v) = each @array) { say “value for $k is $v”;}

value for 0 is bvalue for 1 is a

Sunday, December 5, 2010

my @array = qw(a b);

while (my ($k, $v) = each @array) { say “value for $k is $v”;}

my @array = qw(a b);

for my $k (0 .. $#array) { say “value for $k is $array[$k]”;}

Sunday, December 5, 2010

sub redump { my ($href) = @_; while (my ($k, $v) = each %hash) { say “value for $k is $v”; }}

my %hash = (a => 1, b => 2);

while (my ($k, $v) = each %hash) { print “== $k ==”; redump(\%hash);}

Sunday, December 5, 2010

my @array = qw(a b);

while (my ($k, $v) = each @array) { say “value for $k is $v”;}

Sunday, December 5, 2010

my @array = qw(a b);

while (my ($k, $v) = each @array) { say “value for $k is $v”; do_something(\@array);}

Sunday, December 5, 2010

my @array = qw(a b);

while (my ($k, $v) = each @array) { say “value for $k is $v”;}

Sunday, December 5, 2010

my @array = qw(a b);

while (my ($k, $v) = each @array) { my $string = $part_for_maybe_transient->bodyhandle->as_string; my $transient_pos = _match_position($string, $Not_An_Error); last unless defined $transient_pos; my $permanent_pos = _match_position($string, $Really_An_Error); my $orig_msg_pos = _match_position($string, $Returned_Message_Below); last if _position_before($permanent_pos, $orig_msg_pos); if (_position_before($transient_pos, $orig_msg_pos)) { say “value for $k is $v”; last if $message->effective_type eq ‘multipart/report’; last if !$first_part || $first_part->effective_type ne ‘text/plain’; my $string = $first_part->as_string; last if length($string) > 3000; # added return receipt (fix for bug #41870) last if $string !~ /auto.{0,20}reply|return receipt |vacation|(out|away|on holiday).*office/i; $self->log(“looks like an autoreply, ignoring.”); $self->{type} = “vacation autoreply”; $self->{is_bounce} = 0; return $self; }}

Sunday, December 5, 2010

AVOIDeach @array

Sunday, December 5, 2010

local ??

Sunday, December 5, 2010

use Ancient::Utility qw(stuff);

my $result = do { local $Ancient::Utility::WIDTH = 10; stuff( $input );};

Sunday, December 5, 2010

my $href = { a => 1, b => 2 };

my $result = do { local $href->{a} = 3; stuff( $href );};

Sunday, December 5, 2010

my $href = { a => 1, b => 2 };

my $result = do { delete local $href->{a}; stuff( $href );};

Sunday, December 5, 2010

$]

Sunday, December 5, 2010

$[

Sunday, December 5, 2010

perlvar

$[ - first index of array

Sunday, December 5, 2010

perlvar

$[ - first index of array

- so you can make $array[1] mean first

Sunday, December 5, 2010

perlvar

$[ - first index of array

- so you can make $array[1] mean first

- isn’t that awesome???

Sunday, December 5, 2010

perlvar

$[ - first index of array

- so you can make $array[1] mean first

- isn’t that awesome???

- yeah, about as awesome as Comic Sans

Sunday, December 5, 2010

perlvar

$[

$[ = 1;

for (1 .. $#array) { ...}

Sunday, December 5, 2010

perlvar

$[

for ($[ .. $#array) { ...}

Sunday, December 5, 2010

perlvar

$[

Assigned to $[. Are you some kind of idiot or something? at -e line 123.

Sunday, December 5, 2010

perlvar

$[

Use of assignment to $[ is deprecated at -e line 123.

Sunday, December 5, 2010

More About Deprecations

Sunday, December 5, 2010

@INC

Sunday, December 5, 2010

perlvar

@INC: /usr/pkg/lib/perl5/5.8.0/i386-solaris /usr/pkg/lib/perl5/5.8.0 /usr/pkg/lib/perl5/site_perl/5.8.0/i386-solaris /usr/pkg/lib/perl5/site_perl/5.8.0 /usr/pkg/lib/perl5/site_perl /usr/pkg/lib/perl5/vendor_perl/5.8.0/i386-solaris /usr/pkg/lib/perl5/vendor_perl/5.8.0 /usr/pkg/lib/perl5/vendor_perl

Sunday, December 5, 2010

perlvar

@INC: /usr/pkg/lib/perl5/5.8.0/i386-solaris /usr/pkg/lib/perl5/5.8.0 /usr/pkg/lib/perl5/site_perl/5.8.0/i386-solaris /usr/pkg/lib/perl5/site_perl/5.8.0 /usr/pkg/lib/perl5/site_perl /usr/pkg/lib/perl5/vendor_perl/5.8.0/i386-solaris /usr/pkg/lib/perl5/vendor_perl/5.8.0 /usr/pkg/lib/perl5/vendor_perl

Sunday, December 5, 2010

perlvar

@INC: /usr/pkg/lib/perl5/site_perl/5.8.0/i386-solaris /usr/pkg/lib/perl5/site_perl/5.8.0 /usr/pkg/lib/perl5/site_perl /usr/pkg/lib/perl5/vendor_perl/5.8.0/i386-solaris /usr/pkg/lib/perl5/vendor_perl/5.8.0 /usr/pkg/lib/perl5/vendor_perl /usr/pkg/lib/perl5/5.8.0/i386-solaris /usr/pkg/lib/perl5/5.8.0

Sunday, December 5, 2010

now we can remove stuff from the core distribution

Sunday, December 5, 2010

Class::ISAPod::PlainerShell

Sunday, December 5, 2010

Class::ISAPod::PlainerShellSwitch

Sunday, December 5, 2010

… and …

Sunday, December 5, 2010

Sunday, December 5, 2010

my $x = get_input;

Sunday, December 5, 2010

my $x = get_input;

if ( $x >= 0 ) {

Sunday, December 5, 2010

my $x = get_input;

if ( $x >= 0 ) { do_something for 0 .. $x;

Sunday, December 5, 2010

my $x = get_input;

if ( $x >= 0 ) { do_something for 0 .. $x;} else {

Sunday, December 5, 2010

my $x = get_input;

if ( $x >= 0 ) { do_something for 0 .. $x;} else { ...

Sunday, December 5, 2010

my $x = get_input;

if ( $x >= 0 ) { do_something for 0 .. $x;} else { ...}

Sunday, December 5, 2010

my $x = get_input;

if ( $x >= 0 ) { do_something for 0 .. $x;} else { ...}

Sunday, December 5, 2010

my $x = get_input;

if ( $x >= 0 ) { do_something for 0 .. $x;} else { die “Unimplemented”}

Sunday, December 5, 2010

sub virtual_method { ... }

Sunday, December 5, 2010

sub method_I_will_write_later { ... }

Sunday, December 5, 2010

Unimplemented at Some::Library line 123

Sunday, December 5, 2010

AVOID...

Sunday, December 5, 2010

AVOID...

(except maybe in slides and pseudocode)

Sunday, December 5, 2010

sub virtual_method { confess ‘...’}

sub method_I_will_write_later { confess ‘...’}

Sunday, December 5, 2010

error message improvements

Sunday, December 5, 2010

perldiagSunday, December 5, 2010

perldiagSunday, December 5, 2010

perldiagSunday, December 5, 2010

perldiag

perl -MCGI -e’my $q = CGI->new;’Unrecognized character \xE2 in column 12 at -e line 1.

Sunday, December 5, 2010

perldiag

perl -MCGI -e’my $q = CGI­−->new;’Unrecognized character \xE2; marked by <-- HERE after y $q = CGI<-- HERE near column 12 at -e line 1.

perl -MCGI -e’my $q = CGI->new;’Unrecognized character \xE2 in column 12 at -e line 1.

Sunday, December 5, 2010

perldiag

My Favorite 5.10-ism?

Use of uninitialized value $time in concatenation (.) or string at hello.plx line 9.

$str = “Greetings, $name. Your last login was $last. It is now $time.”;

Sunday, December 5, 2010

perldiag

My Favorite 5.12-ism?

if (length $input->{new_email}) { $user->update_email(...);}

Sunday, December 5, 2010

perldiag

My Favorite 5.12-ism?

Use of uninitialized value in length at - line 3120.

if (length $input->{new_email}) { $user->update_email(...);}

Sunday, December 5, 2010

perldiag

My Favorite 5.12-ism?

if (length $input->{new_email}) { $user->update_email(...);}

Sunday, December 5, 2010

overloading

Sunday, December 5, 2010

my $object = Object->new;

print $object;

Sunday, December 5, 2010

my $object = Object->new;

{ no overloading; print $object;}

Sunday, December 5, 2010

my $filename = get_filename;

if (-d $filename) { handle_directory($filename);}

Sunday, December 5, 2010

package Filename;

use overload ‘-X’ => sub { my ($self, $test) = @_; return $self->is_dir if $test eq ‘d’; return $self->cd_able if $test eq ‘x’; ...;};

Sunday, December 5, 2010

my $file = get_file;

if (-d $file) { handle_directory($file);}

Sunday, December 5, 2010

my $filename = get_file;

if (-d $file and -x _) { handle_directory($file);}

Sunday, December 5, 2010

my $filename = get_filename;

if (-d -x $filename) { handle_directory($filename);}

Sunday, December 5, 2010

AVOIDoverload -X

Sunday, December 5, 2010

y2038

Sunday, December 5, 2010

Sunday, December 5, 2010

~$ perl5.10.0 -E ‘say scalar localtime 2**31-1’

Sunday, December 5, 2010

~$ perl5.10.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038

Sunday, December 5, 2010

~$ perl5.10.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038

~$ perl5.10.0 -E ‘say scalar localtime 2**31’

Sunday, December 5, 2010

~$ perl5.10.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038

~$ perl5.10.0 -E ‘say scalar localtime 2**31’Fri Dec 13 15:45:52 1901

Sunday, December 5, 2010

Sunday, December 5, 2010

~$ perl5.12.0 -E ‘say scalar localtime 2**31-1’

Sunday, December 5, 2010

~$ perl5.12.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038

Sunday, December 5, 2010

~$ perl5.12.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038

~$ perl5.12.0 -E ‘say scalar localtime 2**31’

Sunday, December 5, 2010

~$ perl5.12.0 -E ‘say scalar localtime 2**31-1’Mon Jan 18 22:14:07 2038

~$ perl5.12.0 -E ‘say scalar localtime 2**31’Mon Jan 18 22:14:08 2038

Sunday, December 5, 2010

some non-everyday changes

Sunday, December 5, 2010

A

B C

D

Method Resolution Order

mroSunday, December 5, 2010

A

B C

D

Method Resolution Order

- 5.8 : D, B, A, C

mroSunday, December 5, 2010

A

B C

D

Method Resolution Order

- 5.8 : D, B, A, C

- 5.10: D, B, C, A

mroSunday, December 5, 2010

A

B C

D

Method Resolution Order

- 5.8 : D, B, A, C

- 5.10: D, B, C, A

- 5.12: Anything!

mroSunday, December 5, 2010

A

B C

D

Method Resolution Order

- 5.8 : D, B, A, C

- 5.10: D, B, C, A

- 5.12: F

MRO::DefineSunday, December 5, 2010

use strict;use warnings;

package Booster::Gold;our $VERSION = ‘1.00’;

...

1;

Sunday, December 5, 2010

use 5.12.0;use warnings;

package Booster::Gold 1.00;

...

1;

Sunday, December 5, 2010

use 5.14.0;use warnings;

package Booster::Gold 1.00 { ...}

1;

Sunday, December 5, 2010

http://www.perl.org/get.html

Sunday, December 5, 2010

Any questions?

Sunday, December 5, 2010