Фичи 5.10 на практике

76
Фичи Perl 5.10 на практике

description

 

Transcript of Фичи 5.10 на практике

Page 1: Фичи 5.10 на практике

Фичи Perl 5.10на практике

Page 2: Фичи 5.10 на практике

5.10 RC1 17 ноября 20075.8.8 1 февраля 20065.8.6 27 ноября 20045.8.0 18 июля 20025.6.0 22 марта 2000

Page 3: Фичи 5.10 на практике

#!/usr/bin/perl5.10

> perl5.10 script.pl

Page 4: Фичи 5.10 на практике

#!/perl5.10/bin/perl

> perl5.10 script.pl

Page 5: Фичи 5.10 на практике

#!/usr/bin/perl

> perl script.pl

Page 6: Фичи 5.10 на практике

use feature

Page 7: Фичи 5.10 на практике

use feature qw(    say    switch    state);

Page 8: Фичи 5.10 на практике

use feature qw(    say    switch    state);

use feature ":5.10";

Page 9: Фичи 5.10 на практике

use feature qw(    say    switch    state);

use feature ":5.10";use 5.10.0;

Page 10: Фичи 5.10 на практике

use feature qw(    say    switch    state);

use feature ":5.10";use v5.10.0;

Page 11: Фичи 5.10 на практике

#!/usr/bin/perl

use feature "***";

Page 12: Фичи 5.10 на практике

#!/usr/bin/perl

use feature "say";say "Perl 6?";

Page 13: Фичи 5.10 на практике

#!/usr/bin/perl

use feature "say";say "Perl 6?";no feature "say";

Page 14: Фичи 5.10 на практике

> perl ‐e \  "use feature qw(say); say $$;"

Page 15: Фичи 5.10 на практике

> perl ‐e \  "use feature qw(say); say $$;"

> perl ‐E "say $$;"

Page 16: Фичи 5.10 на практике

> perl ‐e \  "use feature qw(say); say $$;"

> perl ‐E "say $$;"

Page 17: Фичи 5.10 на практике

Modern::Perl

Page 18: Фичи 5.10 на практике

#!/usr/bin/perl

use Modern::Perl;

say "Perl Tashkent";

Page 19: Фичи 5.10 на практике

#!/usr/bin/perl

use Modern::Perl;use utf8;

say "Perl Tashkent";

Page 20: Фичи 5.10 на практике

//

defined‐or

Page 21: Фичи 5.10 на практике

my $a;my $b = $a // 2;say $b;           2

Page 22: Фичи 5.10 на практике

my $c = 0;my $d = $c // 3;say $d;           0

my $e = 0;my $f = $e || 4;say $f;           4

Page 23: Фичи 5.10 на практике

sub get_tagID {    my $tag = shift;        

    

    return $tagID;}

Page 24: Фичи 5.10 на практике

sub get_tagID {    my $tag = shift;        # Попытка найти существующий

    

    return $tagID;}

Page 25: Фичи 5.10 на практике

sub get_tagID {    my $tag = shift;        # Попытка найти существующий    # Если нет, то добавить в базу    

    return $tagID;}

Page 26: Фичи 5.10 на практике

sub get_tagID {    my $tag = shift;        # Попытка найти существующий    # Если нет, то добавить в базу    # Узнать последний id

    return $tagID;}

Page 27: Фичи 5.10 на практике

# Попытка найти существующийmy $sth = dbh‐>prepare("    select id from tags    where tag = ?")$sth‐>execute($tag);

my ($tagID) =     $sth‐>fetchrow_array();$sth‐>finish();

Page 28: Фичи 5.10 на практике

# Если нет, то добавить в базуunless ($tag_ID) {    my $sth = dbh‐>prepare("        insert into tags        (tag) values (?)    ");    $sth‐>execute($tag);       . . . }

Page 29: Фичи 5.10 на практике

# Узнать последний idunless ($tag_ID) {    . . .     $sth = dbh‐>prepare("        select last_insert_id()        from tags    ");    ($tagID) =        $sth‐>fetchrow_array();    $sth‐>finish();}

Page 30: Фичи 5.10 на практике

# Узнать последний idunless ($tag_ID) {    . . .     $sth = dbh‐>prepare("        select last_insert_id()        from tags    ");    ($tagID) =        $sth‐>fetchrow_array();    $sth‐>finish();}

Page 31: Фичи 5.10 на практике

sub get_tagID {    my $tag = shift;        . . .

$tagID //= new_tagID();

    return $tagID;}

Page 32: Фичи 5.10 на практике

my $per_page =     $config{per_page} // 10;

Page 33: Фичи 5.10 на практике

my $_;

Page 34: Фичи 5.10 на практике

for (1..5) {    my $_ = '*';    print;}               *****

Page 35: Фичи 5.10 на практике

$::_

Page 36: Фичи 5.10 на практике

for (1..5) {    my $_ = '*';    print $::_;}               12345

Page 37: Фичи 5.10 на практике

our $_;

Page 38: Фичи 5.10 на практике

for (1..5) {    our $_ = '*';    print $::_;}               *****

Page 39: Фичи 5.10 на практике

> perl5.10 ‐E \  "say for 1..3"

> perl6 ‐e \  "say for 1..3"

Page 40: Фичи 5.10 на практике

> perl5.10 ‐E \  "say for 1..3"

> perl6 ‐e \  "say for 1..3"

123

\n\n\n

Page 41: Фичи 5.10 на практике

~~

Page 42: Фичи 5.10 на практике

~~Smart matching

Page 43: Фичи 5.10 на практике

use feature 'say';

my $date     = 'Wed 13 May, 2009';say 'Today' if $date ~~ /Wed/;

Page 44: Фичи 5.10 на практике

use feature 'switch';

Page 45: Фичи 5.10 на практике

use feature qw(switch say);

my $tag = 'perlrus08';given ($tag) {    when ('perlrus08') {        say 'Yes';    }}

Page 46: Фичи 5.10 на практике

use feature qw(switch say);

my $tag = 'perluz1';given ($tag) {    when ('perlz1') {        say 'Yes';    }    default {say 'No';}}

Page 47: Фичи 5.10 на практике

when (123)

when ($value)

when (undef)

when ([2001..2100])

when (/\d+/)

Page 48: Фичи 5.10 на практике

when ($_ > 0)

when (int)

when (int $_)

when (\&test_the_value)

when (test_the_value($_))

Page 49: Фичи 5.10 на практике

given ('perlrus08') {    when (/\d+/) {        say 'digits';        continue;    }    when (/perl/i) {        say 'Perl';    }}

Page 50: Фичи 5.10 на практике

when ($what)

==when ($_ ~~ $what)

Page 51: Фичи 5.10 на практике

$left ~~ $right

==$right ~~ $left

Page 52: Фичи 5.10 на практике

use feature 'state';

Page 53: Фичи 5.10 на практике

sub counter{    state $value = 0;    $value++;    say $value;}

counter();             1counter();             2counter();             3

Page 54: Фичи 5.10 на практике

Регулярныевыражения

Page 55: Фичи 5.10 на практике

Именованные буферы

my $date = 'Wed 13 May 2009';$date =~ /    (           \w+  )    \s+    (           \d+  )    \s+    (           \w+  )    \s+    (           \d{4})/x;

say $1;                   Thusay $4;                   2007

Page 56: Фичи 5.10 на практике

Именованные буферы

my $date = 'Wed 13 May 2009';$date =~ /    (?<wday>    \w+  )    \s+    (?<day>     \d+  )    \s+    (?<month>   \w+  )    \s+    (?<year>    \d{4})/x;

say $+{wday};             Thusay $+{year};             2007

Page 57: Фичи 5.10 на практике

Именованные буферы

my $date = 'Wed 13 May 2009';

$date =~ s/       (?<year>\d{4})

    /        $+{year} + 1    /xe;

say $date;        Wed 13 May 2009

Page 58: Фичи 5.10 на практике

my $code = 'my $value = 100; say $value;';

$code =~ s/    my                          \s*    (?<variable>    \$[a‐z]+)   \s*    =                           \s*    (?<value>       [^;]+   )   \s*    ;                           \s*        (?<other_code>.*?)        (\k<variable>)        /$+{other_code}$+{value}/x;

say $code;                           say 100;

Page 59: Фичи 5.10 на практике

my $leap_years = '1992 1996 2004 2008';

$leap_years =~ m/    (        ?<year>    1    \d{3}    )    \s*    (        ?<year>    2    \d{3}    )/x;

say $_ for @{$‐{year}};           1996                                  2004

Page 60: Фичи 5.10 на практике

my $leap_years = '1992 1996 2004 2008';

$leap_years =~ m/    (        ?<year>    1    \d{3}    )   

/gx;

say $_ for @{$‐{year}};           1992

Page 61: Фичи 5.10 на практике

my $leap_years = '1992 1996 2004 2008';

$leap_years =~ m/    (        ?<year>    1    \d{3}   \s*    )+   

/gx;

say $_ for @{$‐{year}};           1996

Page 62: Фичи 5.10 на практике

use feature 'say';

my $expr = '1 + (2 + (3 + (4 + 5) + 6))';

$expr =~ s/    \(            (                [^()]+            )                    |            (?1)    \)    /say $1;/xge;

Page 63: Фичи 5.10 на практике

Posessive quantifiers

?+*+++

{min, max}+

Page 64: Фичи 5.10 на практике

/  "    (?:         [^"\\]++       |         \\.    )*+  "/x

Page 65: Фичи 5.10 на практике

(?| ...)

Page 66: Фичи 5.10 на практике

my $re = qr/      (\d{4})(\d\d)(\d\d)   |      (\w+),\s*(\d{4}))/x;

'20090513' =~ $re;say "$1 . $2 . $3";

'May, 2009' =~ $re;say "$4 . $5";

Page 67: Фичи 5.10 на практике

my $re = qr/   (?|(\d{4})(\d\d)(\d\d)   |      (\w+),\s*(\d{4})))/x;

'20090513' =~ $re;say "$1 . $2 . $3";

'May, 2009' =~ $re;say "$1 . $2";

Page 68: Фичи 5.10 на практике

\g{N}\gN

Page 69: Фичи 5.10 на практике

\g{‐N}

Page 70: Фичи 5.10 на практике

\k<named>

==\g{named}

Page 71: Фичи 5.10 на практике

\K

Page 72: Фичи 5.10 на практике

\v\h

Page 73: Фичи 5.10 на практике

\V\H

Page 74: Фичи 5.10 на практике

\R

Page 75: Фичи 5.10 на практике

\R (?>      \x0D\x0A?   |      [         \x0A‐\x0C         \x85         \x{2028}         \x{2029}      ])

Page 76: Фичи 5.10 на практике

__END__

__DATA__Андрей Шитов — 2007, [email protected]  |  http://shitov.ru