Upload
ricardo-signes
View
1.671
Download
1
Tags:
Embed Size (px)
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