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

1,982 views

Published on

Published in: Technology
  • No, that dbh is a name of a function returning data base handle.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hi, Andrew! There was a typo on slide #27 - there must be $dbh instead of dbh. And slide #57 - maybe 'say $date' should print 'Wed 13 May 2010'?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

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

  1. 1. Фичи Perl 5.10 на практике
  2. 2. 5.10 RC1 17 ноября 2007 5.8.8 1 февраля 2006 5.8.6 27 ноября 2004 5.8.0 18 июля 2002 5.6.0 22 марта 2000
  3. 3. #!/usr/bin/perl5.10 > perl5.10 script.pl
  4. 4. #!/perl5.10/bin/perl > perl5.10 script.pl
  5. 5. #!/usr/bin/perl > perl script.pl
  6. 6. use feature
  7. 7. use feature qw(     say     switch     state );
  8. 8. use feature qw(     say     switch     state ); use feature quot;:5.10quot;;
  9. 9. use feature qw(     say     switch     state ); use feature quot;:5.10quot;; use 5.10.0;
  10. 10. use feature qw(     say     switch     state ); use feature quot;:5.10quot;; use v5.10.0;
  11. 11. #!/usr/bin/perl use feature quot;***quot;;
  12. 12. #!/usr/bin/perl use feature quot;sayquot;; say quot;Perl 6?quot;;
  13. 13. #!/usr/bin/perl use feature quot;sayquot;; say quot;Perl 6?quot;; no feature quot;sayquot;;
  14. 14. > perl ‐e    quot;use feature qw(say); say $$;quot;
  15. 15. > perl ‐e    quot;use feature qw(say); say $$;quot; > perl ‐E quot;say $$;quot;
  16. 16. > perl ‐e    quot;use feature qw(say); say $$;quot; > perl ‐E quot;say $$;quot;
  17. 17. Modern::Perl
  18. 18. #!/usr/bin/perl use Modern::Perl; say quot;Perl Tashkentquot;;
  19. 19. #!/usr/bin/perl use Modern::Perl; use utf8; say quot;Perl Tashkentquot;;
  20. 20. // defined‐or
  21. 21. my $a; my $b = $a // 2; say $b;           2
  22. 22. my $c = 0; my $d = $c // 3; say $d;           0 my $e = 0; my $f = $e || 4; say $f;           4
  23. 23. sub get_tagID {     my $tag = shift;                    return $tagID; }
  24. 24. sub get_tagID {     my $tag = shift;          # Попытка найти существующий          return $tagID; }
  25. 25. sub get_tagID {     my $tag = shift;          # Попытка найти существующий     # Если нет, то добавить в базу          return $tagID; }
  26. 26. sub get_tagID {     my $tag = shift;          # Попытка найти существующий     # Если нет, то добавить в базу     # Узнать последний id     return $tagID; }
  27. 27. # Попытка найти существующий my $sth = dbh‐>prepare(quot;     select id from tags     where tag = ? quot;) $sth‐>execute($tag); my ($tagID) =      $sth‐>fetchrow_array(); $sth‐>finish();
  28. 28. # Если нет, то добавить в базу unless ($tag_ID) {     my $sth = dbh‐>prepare(quot;         insert into tags         (tag) values (?)     quot;);     $sth‐>execute($tag);         . . .  }
  29. 29. # Узнать последний id unless ($tag_ID) {     . . .      $sth = dbh‐>prepare(quot;         select last_insert_id()         from tags     quot;);     ($tagID) =         $sth‐>fetchrow_array();     $sth‐>finish(); }
  30. 30. # Узнать последний id unless ($tag_ID) {     . . .      $sth = dbh‐>prepare(quot;         select last_insert_id()         from tags     quot;);     ($tagID) =         $sth‐>fetchrow_array();     $sth‐>finish(); }
  31. 31. sub get_tagID {     my $tag = shift;          . . . $tagID //= new_tagID();     return $tagID; }
  32. 32. my $per_page =      $config{per_page} // 10;
  33. 33. my $_;
  34. 34. for (1..5) {     my $_ = '*';     print; }               *****
  35. 35. $::_
  36. 36. for (1..5) {     my $_ = '*';     print $::_; }               12345
  37. 37. our $_;
  38. 38. for (1..5) {     our $_ = '*';     print $::_; }               *****
  39. 39. > perl5.10 ‐E    quot;say for 1..3quot; > perl6 ‐e    quot;say for 1..3quot;
  40. 40. > perl5.10 ‐E  1   quot;say for 1..3quot; 2 3 > perl6 ‐e  n   quot;say for 1..3quot; n n
  41. 41. ~~
  42. 42. ~~ Smart matching
  43. 43. use feature 'say'; my $date      = 'Wed 13 May, 2009'; say 'Today' if $date ~~ /Wed/;
  44. 44. use feature 'switch';
  45. 45. use feature qw(switch say); my $tag = 'perlrus08'; given ($tag) {     when ('perlrus08') {         say 'Yes';     } }
  46. 46. use feature qw(switch say); my $tag = 'perluz1'; given ($tag) {     when ('perlz1') {         say 'Yes';     }     default {say 'No';} }
  47. 47. when (123) when ($value) when (undef) when ([2001..2100]) when (/d+/)
  48. 48. when ($_ > 0) when (int) when (int $_) when (&test_the_value) when (test_the_value($_))
  49. 49. given ('perlrus08') {     when (/d+/) {         say 'digits';         continue;     }     when (/perl/i) {         say 'Perl';     } }
  50. 50. when ($what) == when ($_ ~~ $what)
  51. 51. $left ~~ $right == $right ~~ $left
  52. 52. use feature 'state';
  53. 53. sub counter{     state $value = 0;     $value++;     say $value; } counter();             1 counter();             2 counter();             3
  54. 54. Регулярные выражения
  55. 55. Именованные буферы my $date = 'Wed 13 May 2009'; $date =~ /     (           w+  )    s+     (           d+  )    s+     (           w+  )    s+     (           d{4}) /x; say $1;                   Thu say $4;                   2007
  56. 56. Именованные буферы my $date = 'Wed 13 May 2009'; $date =~ /     (?<wday>    w+  )    s+     (?<day>     d+  )    s+     (?<month>   w+  )    s+     (?<year>    d{4}) /x; say $+{wday};             Thu say $+{year};             2007
  57. 57. Именованные буферы my $date = 'Wed 13 May 2009'; $date =~ s/        (?<year>d{4})     /         $+{year} + 1     /xe; say $date;        Wed 13 May 2009
  58. 58. 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;
  59. 59. 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
  60. 60. my $leap_years = '1992 1996 2004 2008'; $leap_years =~ m/     (         ?<year>    1    d{3}     )     /gx; say $_ for @{$‐{year}};           1992
  61. 61. my $leap_years = '1992 1996 2004 2008'; $leap_years =~ m/     (         ?<year>    1    d{3}   s*     )+     /gx; say $_ for @{$‐{year}};           1996
  62. 62. use feature 'say'; my $expr = '1 + (2 + (3 + (4 + 5) + 6))'; $expr =~ s/     (             (                 [^()]+             )                      |             (?1)     )     /say $1;/xge;
  63. 63. Posessive quantifiers ?+ *+ ++ {min, max}+
  64. 64. /   quot;     (?:          [^quot;]++        |          .     )*+   quot; /x
  65. 65. (?| ...)
  66. 66. my $re = qr/       (d{4})(dd)(dd)    |       (w+),s*(d{4})) /x; '20090513' =~ $re; say quot;$1 . $2 . $3quot;; 'May, 2009' =~ $re; say quot;$4 . $5quot;;
  67. 67. my $re = qr/    (?|(d{4})(dd)(dd)    |       (w+),s*(d{4}))) /x; '20090513' =~ $re; say quot;$1 . $2 . $3quot;; 'May, 2009' =~ $re; say quot;$1 . $2quot;;
  68. 68. g{N} gN
  69. 69. g{‐N}
  70. 70. k<named> == g{named}
  71. 71. K
  72. 72. v h
  73. 73. V H
  74. 74. R
  75. 75. R (?>       x0Dx0A?    |       [          x0A‐x0C          x85          x{2028}          x{2029}       ] )
  76. 76. __END__ __DATA__ Андрей Шитов — 2007, 2009 andy@shitov.ru  |  http://shitov.ru

×