SlideShare una empresa de Scribd logo
1 de 214
Descargar para leer sin conexión
Perl 5
 what's new?
Perl 5.10
for people who are not totally insane
Perl 5.12
  for everyday use
Perl 5.14
  for pragmatists
Perl 5.16
for the working programmer
Lexical Semantics!
use feature ‘say’;
say “This is a test!”;

{
    no feature ‘say’;
    say “This is fatal!”;
}
use 5.16.0;
say “This is a test!”;

{
    no feature ‘say’;
    say “This is fatal!”;
}
#!/usr/bin/perl
use strict;
use warnings;
use 5.16.0; # use feature ‘:5.16’;

my $x = Reticulator->new;

$x->reticulate(@splines);
#!/usr/bin/perl
use strict;
use warnings;
            # no feature;

my $x = Reticulator->new;

$x->reticulate(@splines);
#!/usr/bin/perl
use strict;
use warnings;
            # use feature ‘:default’

my $x = Reticulator->new;

$x->reticulate(@splines);
array_base: $[
Cool New Features!
Better Error Message(s)

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




                                 perldiag
Better Error Message(s)

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




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


                                 perldiag
Better Error Message(s)

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




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


                                  perldiag
State Variables
my $LINES_READ = 0;

sub read_line {
  $LINES_READ++;

    ...
}


                            perlsub
State Variables
{
    my $LINES_READ = 0;

    sub read_line {
      $LINES_READ++;

        ...
    }
}

                            perlsub
State Variables

sub read_line {
  state $LINES_READ = 0;

    $LINES_READ++;
    ...
}


                           perlsub
truth and definedness




                        perlop
truth and definedness
sub record_sale {




                          perlop
truth and definedness
sub record_sale {
  my ($product, $amount) = @_;




                             perlop
truth and definedness
sub record_sale {
  my ($product, $amount) = @_;

 my $price = $amount




                             perlop
truth and definedness
sub record_sale {
  my ($product, $amount) = @_;

 my $price = $amount
          || $product->price;




                             perlop
truth and definedness
sub record_sale {
  my ($product, $amount) = @_;

 my $price = $amount
          || $product->price;

 ...


                             perlop
truth and definedness
sub record_sale {
  my ($product, $amount) = @_;

    my $price = $amount
             || $product->price;

    ...
}

                               perlop
truth and definedness
sub record_sale {
  my ($product, $amount) = @_;

    $price = defined $amount
           ? $amount
           : $product->price;

    ...
}

                                perlop
truth and definedness
sub record_sale {
  my ($product, $amount) = @_;

    my $price = $amount
             || $product->price;

    ...
}

                               perlop
truth and definedness
sub record_sale {
  my ($product, $amount) = @_;

    my $price = $amount
             // $product->price;

    ...
}

                               perlop
the new OR operator
sub record_sale {
  my ($product, $amount) = @_;

    $amount //= $product->cost;

    ...
}


                                  perlop
say $what


- new built-in, say
- it’s like print
- but it adds a newline for you

                                  perlfunc
say $what




            perlfunc
say $what

print “Hello, world!n”;




                           perlfunc
say $what

print “Hello, world!n”;


print “$messagen”;




                           perlfunc
say $what

print “Hello, world!n”;


print “$messagen”;


print “$_n” for @lines;


                           perlfunc
say $what

print “Hello, world!n”;
say “Hello, world!”;
print “$messagen”;


print “$_n” for @lines;


                           perlfunc
say $what

print “Hello, world!n”;
say “Hello, world!”;
print “$messagen”;
say $message;
print “$_n” for @lines;


                           perlfunc
say $what

print “Hello, world!n”;
say “Hello, world!”;
print “$messagen”;
say $message;
print “$_n” for @lines;
say for @lines;

                           perlfunc
$ perl -e ‘print “Foon”’
$ perl -e ‘print “Foon”’

$ perl -E ‘say “Foo”’
Recursion!

sub fact {
  my ($x) = @_; # must be +int
  return $x if $x == 1;
  return $x * fact($x - 1);
}
Recursion!

sub fact {
  my ($x) = @_; # must be +int
  return $x if $x == 1;
  return $x * fact($x - 1);
}
Recursion!

my $fact = sub {
  my ($x) = @_; # must be +int
  return $x if $x == 1;
  return $x * $fact->($x - 1);
};
Recursion!

my $fact = sub {
  my ($x) = @_; # must be +int
  return $x if $x == 1;
  return $x * $fact->($x - 1);
};
Recursion!

my $fact;
$fact = sub   {
  my ($x) =   @_; # must be +int
  return $x   if $x == 1;
  return $x   * $fact->($x - 1);
};
Recursion!

my $fact;
$fact = sub   {
  my ($x) =   @_; # must be +int
  return $x   if $x == 1;
  return $x   * $fact->($x - 1);
};
Recursion!
use Scalar::Util qw(weaken);
my $fact = do {
  my $f1;
  my $f2 = $f1 = sub {
    my ($x) = @_;
    return $x if $x == 1;
    return $x * $f1->($x - 1);
  };
  weaken($f1);
  $f1;
};
Recursion!

use 5.16.0; # current_sub

my $fact = sub {
  my ($x) = @_; # must be +int
  return $x if $x == 1;
  return $x * __SUB__->($x - 1);
};
Filehandles!
autodie

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

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

close $fh;




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

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

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




                                           autodie
autodie
use autodie;

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

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

close $fh;




                               autodie
autodie
use autodie;

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

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

close $fh;



                                        autodie
autodie
use autodie;

sub foo {
  my $filename = shift;
  open my $fh, ‘<‘, $filename;

  while (<$fh>) {
     ...
  }
} # this implicit close DID NOT AUTODIE



                                          autodie
IO::File
sub stream_to_fh {
  my ($self, $fh) = @_;

    fileno $fh
      or die “can’t stream to closed fh”;

    while (my $hunk = $self->next_hunk) {
      print {$fh} $hunk;
    }

    close $fh or die “error closing: $!”;
}




                                            perlopentut
IO::File
sub stream_to_fh {
  my ($self, $fh) = @_;

    $fh->fileno
      or die “can’t stream to closed fh”;

    while (my $hunk = $self->next_hunk) {
      $fh->print($hunk);
    }

    $fh->close or die “error closing: $!”;
}




                                             perlopentut
IO::File

sub stream_to_fh {
  ...
    $fh->print($hunk);
  ...
  $fh->close or die “error closing: $!”;
}

open my $target, ‘>’, ‘/dev/null’
  or die “can’t open bit bucket: $!”;

stream_to_fh($target);


                                           perlopentut
IO::File
use IO::File;

sub stream_to_fh {
  ...
    $fh->print($hunk);
  ...
  $fh->close or die “error closing: $!”;
}

open my $target, ‘>’, ‘/dev/null’
  or die “can’t open bit bucket: $!”;

stream_to_fh($target);


                                           perlopentut
IO::File
use 5.14.0;

sub stream_to_fh {
  ...
    $fh->print($hunk);
  ...
  $fh->close or die “error closing: $!”;
}

open my $target, ‘>’, ‘/dev/null’
  or die “can’t open bit bucket: $!”;

stream_to_fh($target);


                                           perlopentut
IO::File
use 5.14.0;
use autodie;
sub stream_to_fh {
  ...
    $fh->print($hunk);
  ...
  $fh->close or die “error closing: $!”;
}

open my $target, ‘>’, ‘/dev/null’
  or die “can’t open bit bucket: $!”;

stream_to_fh($target);


                                           perlopentut
Package Blocks

package Library::Awesome;
our $VERSION = 1.234;

sub foo { ... }

1;




                            perlfunc
Package Blocks

use 5.12.0;

package Library::Awesome 1.234;

sub foo { ... }

1;




                                  perlfunc
Package Blocks

use 5.12.0;

package Library::Awesome 1.234-alpha;

sub foo { ... }

1;




                                        perlfunc
Package Blocks

package Library::Awesome 1.234 {

    sub foo { ... }

}

1;




                                   perlfunc
overloading

- the -x overload
- the qr overload
- "no overloading"
- unknown overload warns

                           perldoc
Other New Features!
smrt match
smrt match


if ($x ~~ $y) {
  ...
}
smrt match




             perldoc
smrt match

- if $x and $y are unknown, there are 23
  possible dispatch paths




                                           perldoc
smrt match

- if $x and $y are unknown, there are 23
  possible dispatch paths
- and some of them redispatch recursively



                                            perldoc
smrt match

- if $x and $y are unknown, there are 23
  possible dispatch paths
- and some of them redispatch recursively
- no, you won't remember them all


                                            perldoc
smrt match

- if $x and $y are unknown, there are 23
  possible dispatch paths
- and some of them redispatch recursively
- no, you won't remember them all
- ...and they can't be intuited

                                            perldoc
Matching
Matching
if ($x ~~ $y)       {...}
Matching
if ($x ~~ $y)        {...}
if ($str ~~ %hash)   {...}
Matching
if ($x ~~ $y)        {...}
if ($str ~~ %hash)   {...}
if ($str ~~ @arr)    {...}
Matching
if   ($x ~~ $y)              {...}
if   ($str ~~ %hash)         {...}
if   ($str ~~ @arr)          {...}
if   ($str ~~ [ %h, ...])   {...}
Matching
if   ($x ~~ $y)            {...}
if   ($str ~~ %hash)       {...}
if   ($str ~~ @arr)        {...}
if   ($str ~~ [ %h, ...]) {...}
if   (%hash ~~ %h)         {...}
Matching
if   ($x ~~ $y)            {...}
if   ($str ~~ %hash)       {...}
if   ($str ~~ @arr)        {...}
if   ($str ~~ [ %h, ...]) {...}
if   (%hash ~~ %h)         {...}
if   (%hash ~~ @arr)       {...}
Matching
if   ($x ~~ $y)              {...}
if   ($str ~~ %hash)         {...}
if   ($str ~~ @arr)          {...}
if   ($str ~~ [ %h, ...])   {...}
if   (%hash ~~ %h)           {...}
if   (%hash ~~ @arr)         {...}
if   (%hash ~~ [ %h,...])   {...}
given ($x) {
  when ($y) {
    ...
  }
  when ($z) {
    ...
  }
}
given ($x) {
  when ($y) {
    try   { ... }
    catch {
      warn “error: $_”;
      return undef;
    }
  }
}
each @array
each @array


while (my ($i, $v) = each @array) {
  say “$i: $v”;
}
push $aref, @etc;
Now With Fewer Bugs!
y2038
~$ perl5.10.0 -E ‘say scalar localtime 2**31-1’
~$ 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-1’
Mon Jan 18 22:14:07 2038

~$ perl5.10.0 -E ‘say scalar localtime 2**31’
~$ 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
~$ perl5.12.0 -E ‘say scalar localtime 2**31-1’
~$ 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-1’
Mon Jan 18 22:14:07 2038

~$ perl5.12.0 -E ‘say scalar localtime 2**31’
~$ 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
$@

     perlvar
$@




     Try::Tiny
$@

- Well, actually, you use Try::Tiny, right?




                                              Try::Tiny
$@

- Well, actually, you use Try::Tiny, right?
- But this makes Try::Tiny more reliable, too!



                                             Try::Tiny
$@

- Well, actually, you use Try::Tiny, right?
- But this makes Try::Tiny more reliable, too!
- You see, eval and $@ are totally awful

                                             Try::Tiny
use 5.12.0;

{
    package X;
    sub DESTROY { eval { } }
}

eval {
  my $x = bless {} => ‘X’;
  die “DEATH!!”;
};

warn “ERROR: $@”;




                               perlfunc
use 5.12.0;

{
    package X;
    sub DESTROY { eval { } }
}

eval {
  my $x = bless {} => ‘X’;
  die “DEATH!!”;
};

warn “ERROR: $@”;




$ perl5.12.4 test.pl
ERROR:


                               perlfunc
use 5.14.0;

{
    package X;
    sub DESTROY { eval { } }
}

eval {
  my $x = bless {} => ‘X’;
  die “DEATH!!”;
};

warn “ERROR: $@”;




                               perlfunc
use 5.14.0;

{
    package X;
    sub DESTROY { eval { } }
}

eval {
  my $x = bless {} => ‘X’;
  die “DEATH!!”;
};

warn “ERROR: $@”;




$ perl5.14.1 test.pl
ERROR: DEATH!!


                               perlfunc
perl -le ‘print $^X’
perl -le ‘print $^X’

10.0: perl
perl -le ‘print $^X’

10.0: perl
10.1: perl
perl -le ‘print $^X’

10.0: perl
10.1: perl
12.0: perl
perl -le ‘print $^X’

10.0:   perl
10.1:   perl
12.0:   perl
14.0:   perl
perl -le ‘print $^X’

10.0:   perl
10.1:   perl
12.0:   perl
14.0:   perl
16.0:   /Users/rjbs/perl5/perlbrew/perls/16.0/bin/perl
Simpler Strings
Perl is Good at Unicode




                     perlunicode
Perl 5.16 is Better




                      perlunicode
Perl 5.16 is Better

- Unicode 6.1




                           perlunicode
Perl 5.16 is Better

- Unicode 6.1
- every character property is available



                                          perlunicode
Perl 5.16 is Better

- Unicode 6.1
- every character property is available
- X in regex is more sensible

                                          perlunicode
“The Unicode Bug”




                perlunicode
“The Unicode Bug”

- strings aren’t always treated as Unicode




                                             perlunicode
“The Unicode Bug”

- strings aren’t always treated as Unicode
- this causes weird bugs that take ages to find



                                            perlunicode
“The Unicode Bug”

- strings aren’t always treated as Unicode
- this causes weird bugs that take ages to find
-   use feature ‘unicode_strings’;




                                            perlunicode
“The Unicode Bug”

- strings aren’t always treated as Unicode
- this causes weird bugs that take ages to find
-   use feature ‘unicode_strings’;
-   or use 5.12.0




                                            perlunicode
Unicode eval

- eval $str
- is that octets or chars?
- what if it includes "use utf8"
- or you're under "use utf8"?

                                   perldoc
Unicode eval


- evalbytes $str
- unicode_eval


                   perldoc
My Favorite 5.12-ism?
if (length $input->{new_email}) {
  $user->update_email(...);
}




                                    perldiag
My Favorite 5.12-ism?
if (length $input->{new_email}) {
  $user->update_email(...);
}




Use of uninitialized value in length
at - line 3120.



                                    perldiag
My Favorite 5.12-ism?
if (length $input->{new_email}) {
  $user->update_email(...);
}




                                    perldiag
say “I o{23145} Perl 5.14!”;




                                perlsyn
say “I o{23145} Perl 5.14!”;




I ♥ Perl 5.14!


                                perlsyn
say “I 23145 Perl 5.14!”;




I ?45 Perl 5.14!


                             perlsyn
say “I 023145 Perl 5.14!”;




I 145 Perl 5.14!


                              perlsyn
qr{
  (1) (2) (3) (4)     7 10
  (5) (6) (7) (8) (9) 7 10
  (10)                7 10
}x;




                               perlre
qr{
  (1) (2) (3) (4)     o{7} o{10}
  (5) (6) (7) (8) (9) o{7} o{10}
  (10)                g{7} g{10}
}x;




                                     perlre
Unicode 6.1




              charnames
Unicode 6.1




              charnames
Unicode 6




            charnames
Unicode 6




            charnames
Unicode 6




            charnames
Unicode 6




            charnames
Unicode 6




            charnames
Unicode 6




            charnames
Unicode 6




            charnames
Unicode 6




            charnames
Unicode 6




            charnames
N{...}

use 5.16.0;

say “I N{HEAVY BLACK HEART} Queensr”
  . “N{LATIN SMALL LETTER Y WITH DIAERESIS}”
  . “che!”;
case folding
Case Folding


if (lc $foo eq lc $bar) {
  ...
}
Case Folding


if (fc $foo eq fc $bar) {
  ...
}
Case Folding
Case Folding
lc ‘ς‘ ➔ ‘ς‘
Case Folding
lc ‘ς‘ ➔ ‘ς‘
uc ‘ς‘ ➔ ‘Σ‘
Case Folding
lc ‘ς‘ ➔ ‘ς‘
uc ‘ς‘ ➔ ‘Σ‘
fc ‘ς‘ ➔ ‘σ‘
Case Folding
lc ‘ς‘ ➔ ‘ς‘
uc ‘ς‘ ➔ ‘Σ‘
fc ‘ς‘ ➔ ‘σ‘

lc ‘ß’ ➔ ‘ß’
Case Folding
lc ‘ς‘ ➔ ‘ς‘
uc ‘ς‘ ➔ ‘Σ‘
fc ‘ς‘ ➔ ‘σ‘

lc ‘ß’ ➔ ‘ß’
uc ‘ß’ ➔ ‘SS’
Case Folding
lc ‘ς‘ ➔ ‘ς‘
uc ‘ς‘ ➔ ‘Σ‘
fc ‘ς‘ ➔ ‘σ‘

lc ‘ß’ ➔ ‘ß’
uc ‘ß’ ➔ ‘SS’
fc ‘ß’ ➔ ‘ss’
Case Folding
Case Folding


“file under: L$name”
Case Folding


“file under: L$name”

“file under: F$name”
Better Regex
named captures
Regex: Named Captures




                        perlre
Regex: Named Captures

- find matches by name, not position




                                       perlre
Regex: Named Captures

- find matches by name, not position
- avoid the dreaded$1




                                       perlre
Regex: Named Captures

- find matches by name, not position
- avoid the dreaded $1


- no longer second to Python or .Net!

                                        perlre
Regex: Named Captures


# our hypothetical format

section:property = value




                            perlre
Regex: Named Captures

$line =~ /(w+):(w+) = (w+)/;

$section = $1
$name    = $2;
$value   = $3;




                                  perlre
Regex: Named Captures
$line =~ /
  (?<section>   w+):
  (?<name>      w+)
  s* = s*
  (?<value>     w+)
/x;

$section = $+{section};
$name    = $+{name};
$value   = $+{value};

                          perlre
New Regex Modifiers


my $hostname = get_hostname;

$hostname =~ s/..*//;




                               perlre
New Regex Modifiers


my $hostname = get_hostname =~ s/..*//;




                                           perlre
New Regex Modifiers


(my $hostname = get_hostname) =~ s/..*//;




                                         perlre
New Regex Modifiers


my $hostname = get_hostname =~ s/..*//r;




                                            perlre
New Regex Modifiers


my @short_names =
  map { s/..*//; } @long_names;




                                   perlre
New Regex Modifiers


my @short_names =
  map { s/..*//;
        $_ } @long_names;




                            perlre
New Regex Modifiers


my @short_names =
  map { my $x = $_;
        $x =~ s/..*//;
        $x } @long_names;




                            perlre
New Regex Modifiers


my @short_names =
  map { s/..*//r } @long_names;




                                   perlre
New Regex Modifiers


my @short_names =
  map s/..*//r, @long_names;




                                perlre
New Regex Modifiers




                      perldoc
New Regex Modifiers
                /u   /a   /aa   /d   /l

"൮" =~ /d/     ✓    !    !     ¿?   ¿?

"ð" =~ /w/     ✓    !    !     ¿?   ¿?

"ff" =~ /ff/i   ✓    ✓    !     ¿?   ¿?

"ff" =~ /pL/i   ✓    ✓    ✓     ¿?   ¿?


                                          perldoc
New Regex Modifiers
                /u   /a   /aa   /d   /l

"൮" =~ /d/     ✓    !    !     ¿?   ¿?

"ð" =~ /w/     ✓    !    !     ¿?   ¿?

"ff" =~ /ff/i   ✓    ✓    !     ¿?   ¿?

"ff" =~ /pL/i   ✓    ✓    ✓     ¿?   ¿?


                                          perldoc
New Regex Modifiers
                /u   /a   /aa   /d   /l

"൮" =~ /d/     ✓    !    !     ¿?   ¿?

"ð" =~ /w/     ✓    !    !     ¿?   ¿?

"ff" =~ /ff/i   ✓    ✓    !     ¿?   ¿?

"ff" =~ /pL/i   ✓    ✓    ✓     ¿?   ¿?


                                          perldoc
New Regex Modifiers
                /u   /a   /aa   /d   /l

"൮" =~ /d/     ✓    !    !     ¿?   ¿?

"ð" =~ /w/     ✓    !    !     ¿?   ¿?

"ff" =~ /ff/i   ✓    ✓    !     ¿?   ¿?

"ff" =~ /pL/i   ✓    ✓    ✓     ¿?   ¿?


                                          perldoc
New Regex Modifiers
                /u   /a   /aa   /d   /l

"൮" =~ /d/     ✓    !    !     ¿?   ¿?

"ð" =~ /w/     ✓    !    !     ¿?   ¿?

"ff" =~ /ff/i   ✓    ✓    !     ¿?   ¿?

"ff" =~ /pL/i   ✓    ✓    ✓     ¿?   ¿?


                                          perldoc
New Regex Modifiers
                /u   /a   /aa   /d   /l

"൮" =~ /d/     ✓    !    !     ¿?   ¿?

"ð" =~ /w/     ✓    !    !     ¿?   ¿?

"ff" =~ /ff/i   ✓    ✓    !     ¿?   ¿?

"ff" =~ /pL/i   ✓    ✓    ✓     ¿?   ¿?


                                          perldoc
New Regex Modifiers

# To be really ASCII-only:

die “funny un-American characters”
  if $str =~ /P{ASCII}/;

$str =~ /...actual pattern.../;




                                     perlre
study
study
my $re   = qr{...complex...};
study
my $re = qr{...complex...};
my $str = q{...long complex...};
study
my $re = qr{...complex...};
my $str = q{...long complex...};

$str =~ $re; # slow!!
study
my $re = qr{...complex...};
my $str = q{...long complex...};

$str =~ $re; # slow!!

study $str;   # does stuff
study
my $re = qr{...complex...};
my $str = q{...long complex...};

$str =~ $re; # slow!!

study $str;   # does stuff

$str =~ $re; # fast!!
study
my $re = qr{...complex...};
my $str = q{...long complex...};

$str =~ $re; # slow but right!!

study $str;   # does stuff

$str =~ $re; # who knows!!
study
my $re = qr{...complex...};
my $str = q{...long complex...};

$str =~ $re; # slow but right!!

study $str;   # does nothing

$str =~ $re; # slow but right!!
Modder Modlib
Newly Cored Librarys

- JSON
- HTTP::Tiny
- Module::Metadata
- CPAN::Meta

                     perlmodlib
Newly Ejected Librarys

- Devel::DProf
- Switch
- the perl4 core
- ...and more

                    perlmodlib
Old Stuff Removed
qw()


for my $show qw(Smallville Lost V)   {
  $tivo->cancel_pass( $show );
}




                                         perlop
qw()


for my $show (qw(Smallville Lost V)) {
  $tivo->cancel_pass( $show );
}




                                         perlop
$[
$[ - first index of array




                       perlvar
$[ - first index of array


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




                                          perlvar
$[ - first index of array


 - so you can make $array[1] mean first
 - isn’t that awesome???



                                          perlvar
$[ - first index of array


 - so you can make $array[1] mean first
 - isn’t that awesome???
 - yeah, about as awesome as Comic Sans


                                      perlvar
$[

$[ = 1;

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




                       perlvar
$[

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




                        perlvar
$[

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




                                       perlvar
$[

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




                                        perlvar
defined @arr
Any questions?
Thank you!

Más contenido relacionado

La actualidad más candente

2014 database - course 2 - php
2014 database - course 2 - php2014 database - course 2 - php
2014 database - course 2 - phpHung-yu Lin
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Kang-min Liu
 
Learning Perl 6 (NPW 2007)
Learning Perl 6 (NPW 2007)Learning Perl 6 (NPW 2007)
Learning Perl 6 (NPW 2007)brian d foy
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perlgarux
 
Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Jeff Carouth
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHPObject Calisthenics Applied to PHP
Object Calisthenics Applied to PHPGuilherme Blanco
 
Advanced modulinos trial
Advanced modulinos trialAdvanced modulinos trial
Advanced modulinos trialbrian d foy
 
Perl.Hacks.On.Vim
Perl.Hacks.On.VimPerl.Hacks.On.Vim
Perl.Hacks.On.VimLin Yo-An
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongersbrian d foy
 
The Perl6 Type System
The Perl6 Type SystemThe Perl6 Type System
The Perl6 Type Systemabrummett
 
Wx::Perl::Smart
Wx::Perl::SmartWx::Perl::Smart
Wx::Perl::Smartlichtkind
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation TutorialLorna Mitchell
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6garux
 
PHP Functions & Arrays
PHP Functions & ArraysPHP Functions & Arrays
PHP Functions & ArraysHenry Osborne
 
Advanced modulinos
Advanced modulinosAdvanced modulinos
Advanced modulinosbrian d foy
 

La actualidad más candente (20)

2014 database - course 2 - php
2014 database - course 2 - php2014 database - course 2 - php
2014 database - course 2 - php
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)
 
PHP PPT FILE
PHP PPT FILEPHP PPT FILE
PHP PPT FILE
 
Learning Perl 6 (NPW 2007)
Learning Perl 6 (NPW 2007)Learning Perl 6 (NPW 2007)
Learning Perl 6 (NPW 2007)
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perl
 
Perl6 grammars
Perl6 grammarsPerl6 grammars
Perl6 grammars
 
Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHPObject Calisthenics Applied to PHP
Object Calisthenics Applied to PHP
 
Advanced modulinos trial
Advanced modulinos trialAdvanced modulinos trial
Advanced modulinos trial
 
Perl.Hacks.On.Vim
Perl.Hacks.On.VimPerl.Hacks.On.Vim
Perl.Hacks.On.Vim
 
Sorting arrays in PHP
Sorting arrays in PHPSorting arrays in PHP
Sorting arrays in PHP
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongers
 
The Perl6 Type System
The Perl6 Type SystemThe Perl6 Type System
The Perl6 Type System
 
Wx::Perl::Smart
Wx::Perl::SmartWx::Perl::Smart
Wx::Perl::Smart
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation Tutorial
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6
 
PHP Functions & Arrays
PHP Functions & ArraysPHP Functions & Arrays
PHP Functions & Arrays
 
Advanced modulinos
Advanced modulinosAdvanced modulinos
Advanced modulinos
 
Perl 6 by example
Perl 6 by examplePerl 6 by example
Perl 6 by example
 

Similar a What's New in Perl? v5.10 - v5.16

Programming in perl style
Programming in perl styleProgramming in perl style
Programming in perl styleBo Hua Yang
 
Perl Fitxers i Directoris
Perl Fitxers i DirectorisPerl Fitxers i Directoris
Perl Fitxers i Directorisfrankiejol
 
PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)Win Yu
 
Perl 5.10 for People Who Aren't Totally Insane
Perl 5.10 for People Who Aren't Totally InsanePerl 5.10 for People Who Aren't Totally Insane
Perl 5.10 for People Who Aren't Totally InsaneRicardo Signes
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know Aboutjoshua.mcadams
 
Maybe you do not know that ...
Maybe you do not know that ...Maybe you do not know that ...
Maybe you do not know that ...Viktor Turskyi
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlordsheumann
 
Barely Legal Xxx Perl Presentation
Barely Legal Xxx Perl PresentationBarely Legal Xxx Perl Presentation
Barely Legal Xxx Perl PresentationAttila Balazs
 
Writing Maintainable Perl
Writing Maintainable PerlWriting Maintainable Perl
Writing Maintainable Perltinypigdotcom
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationWorkhorse Computing
 
Generating Power with Yield
Generating Power with YieldGenerating Power with Yield
Generating Power with YieldJason Myers
 

Similar a What's New in Perl? v5.10 - v5.16 (20)

Programming in perl style
Programming in perl styleProgramming in perl style
Programming in perl style
 
Perl Fitxers i Directoris
Perl Fitxers i DirectorisPerl Fitxers i Directoris
Perl Fitxers i Directoris
 
PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)
 
Subroutines
SubroutinesSubroutines
Subroutines
 
Perl 5.10 for People Who Aren't Totally Insane
Perl 5.10 for People Who Aren't Totally InsanePerl 5.10 for People Who Aren't Totally Insane
Perl 5.10 for People Who Aren't Totally Insane
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know About
 
Bag of tricks
Bag of tricksBag of tricks
Bag of tricks
 
Introduction to php
Introduction to phpIntroduction to php
Introduction to php
 
Maybe you do not know that ...
Maybe you do not know that ...Maybe you do not know that ...
Maybe you do not know that ...
 
Oops in php
Oops in phpOops in php
Oops in php
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlords
 
Web 8 | Introduction to PHP
Web 8 | Introduction to PHPWeb 8 | Introduction to PHP
Web 8 | Introduction to PHP
 
mro-every.pdf
mro-every.pdfmro-every.pdf
mro-every.pdf
 
wget.pl
wget.plwget.pl
wget.pl
 
Barely Legal Xxx Perl Presentation
Barely Legal Xxx Perl PresentationBarely Legal Xxx Perl Presentation
Barely Legal Xxx Perl Presentation
 
Writing Maintainable Perl
Writing Maintainable PerlWriting Maintainable Perl
Writing Maintainable Perl
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command Interpolation
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
Generating Power with Yield
Generating Power with YieldGenerating Power with Yield
Generating Power with Yield
 

Más de Ricardo Signes

Perl 5: Today, Tomorrow, and Christmas
Perl 5: Today, Tomorrow, and ChristmasPerl 5: Today, Tomorrow, and Christmas
Perl 5: Today, Tomorrow, and ChristmasRicardo Signes
 
Perl 5.14 for Pragmatists
Perl 5.14 for PragmatistsPerl 5.14 for Pragmatists
Perl 5.14 for PragmatistsRicardo Signes
 
Dist::Zilla - Maximum Overkill for CPAN Distributions
Dist::Zilla - Maximum Overkill for CPAN DistributionsDist::Zilla - Maximum Overkill for CPAN Distributions
Dist::Zilla - Maximum Overkill for CPAN DistributionsRicardo Signes
 
Perl 5.12 for Everyday Use
Perl 5.12 for Everyday UsePerl 5.12 for Everyday Use
Perl 5.12 for Everyday UseRicardo Signes
 
Antediluvian Unix: A Guide to Unix Fundamentals
Antediluvian Unix: A Guide to Unix FundamentalsAntediluvian Unix: A Guide to Unix Fundamentals
Antediluvian Unix: A Guide to Unix FundamentalsRicardo Signes
 
Writing Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::CmdWriting Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::CmdRicardo Signes
 
Crafting Custom Interfaces with Sub::Exporter
Crafting Custom Interfaces with Sub::ExporterCrafting Custom Interfaces with Sub::Exporter
Crafting Custom Interfaces with Sub::ExporterRicardo Signes
 
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!Ricardo Signes
 

Más de Ricardo Signes (10)

Perl 5: Today, Tomorrow, and Christmas
Perl 5: Today, Tomorrow, and ChristmasPerl 5: Today, Tomorrow, and Christmas
Perl 5: Today, Tomorrow, and Christmas
 
Perl 5.14 for Pragmatists
Perl 5.14 for PragmatistsPerl 5.14 for Pragmatists
Perl 5.14 for Pragmatists
 
Dist::Zilla - Maximum Overkill for CPAN Distributions
Dist::Zilla - Maximum Overkill for CPAN DistributionsDist::Zilla - Maximum Overkill for CPAN Distributions
Dist::Zilla - Maximum Overkill for CPAN Distributions
 
Perl 5.12 for Everyday Use
Perl 5.12 for Everyday UsePerl 5.12 for Everyday Use
Perl 5.12 for Everyday Use
 
i &lt;3 email
i &lt;3 emaili &lt;3 email
i &lt;3 email
 
Dist::Zilla
Dist::ZillaDist::Zilla
Dist::Zilla
 
Antediluvian Unix: A Guide to Unix Fundamentals
Antediluvian Unix: A Guide to Unix FundamentalsAntediluvian Unix: A Guide to Unix Fundamentals
Antediluvian Unix: A Guide to Unix Fundamentals
 
Writing Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::CmdWriting Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::Cmd
 
Crafting Custom Interfaces with Sub::Exporter
Crafting Custom Interfaces with Sub::ExporterCrafting Custom Interfaces with Sub::Exporter
Crafting Custom Interfaces with Sub::Exporter
 
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
 

Último

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 

Último (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

What's New in Perl? v5.10 - v5.16