SlideShare a Scribd company logo
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
What's New in Perl?  v5.10 - v5.16
$ 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
What's New in Perl?  v5.10 - v5.16
~$ 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
What's New in Perl?  v5.10 - v5.16
~$ 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
What's New in Perl?  v5.10 - v5.16
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!

More Related Content

PDF
Dades i operadors
PDF
[PL] Jak nie zostać "programistą" PHP?
PDF
PHP Tips & Tricks
PDF
The Magic Of Tie
PDF
Learning Perl 6
KEY
Achieving Parsing Sanity In Erlang
PPT
PHP and MySQL
PDF
Text in search queries with examples in Perl 6
Dades i operadors
[PL] Jak nie zostać "programistą" PHP?
PHP Tips & Tricks
The Magic Of Tie
Learning Perl 6
Achieving Parsing Sanity In Erlang
PHP and MySQL
Text in search queries with examples in Perl 6

What's hot (20)

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

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

PDF
Perl 5.10 for People Who Aren't Totally Insane
ODP
Programming in perl style
PDF
PDF
newperl5
PDF
newperl5
PDF
Scripting3
PDF
Lecture19-20
PDF
Lecture19-20
PDF
Marc’s (bio)perl course
PPTX
Lecture 3 Perl & FreeBSD administration
PDF
tutorial7
PDF
tutorial7
PPT
Perl Intro 2 First Program
PDF
IO Streams, Files and Directories
PPT
Introduction to Perl
PDF
Introducing perl6
PDF
Practical approach to perl day1
PDF
I, For One, Welcome Our New Perl6 Overlords
PPTX
Perl slid
ODP
Perl Introduction
Perl 5.10 for People Who Aren't Totally Insane
Programming in perl style
newperl5
newperl5
Scripting3
Lecture19-20
Lecture19-20
Marc’s (bio)perl course
Lecture 3 Perl & FreeBSD administration
tutorial7
tutorial7
Perl Intro 2 First Program
IO Streams, Files and Directories
Introduction to Perl
Introducing perl6
Practical approach to perl day1
I, For One, Welcome Our New Perl6 Overlords
Perl slid
Perl Introduction
Ad

More from Ricardo Signes (10)

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

Recently uploaded (20)

PPTX
OMC Textile Division Presentation 2021.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPT
Teaching material agriculture food technology
PDF
Encapsulation theory and applications.pdf
PDF
Approach and Philosophy of On baking technology
PPTX
Machine Learning_overview_presentation.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
August Patch Tuesday
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Spectral efficient network and resource selection model in 5G networks
OMC Textile Division Presentation 2021.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Teaching material agriculture food technology
Encapsulation theory and applications.pdf
Approach and Philosophy of On baking technology
Machine Learning_overview_presentation.pptx
Network Security Unit 5.pdf for BCA BBA.
Mobile App Security Testing_ A Comprehensive Guide.pdf
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Accuracy of neural networks in brain wave diagnosis of schizophrenia
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
A comparative analysis of optical character recognition models for extracting...
MIND Revenue Release Quarter 2 2025 Press Release
Building Integrated photovoltaic BIPV_UPV.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
August Patch Tuesday
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Spectral efficient network and resource selection model in 5G networks

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