Novidades no Perl 5.10

872 views

Published on

O release 10 do Perl 5 trouxe muitas novidades para desenvolvedores. Conheça um pouco mais sobre smart matching, given-when, o operador // e tantas outras coisas bacanas!

(apresentado no Encontro Técnico dos Rio Perl Mongers em 2008)

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
872
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Novidades no Perl 5.10

  1. 1. Novidades do Perl 5.10 Breno G. de Oliveira breno@rio.pm.org
  2. 2. Novidades do Perl 5.10 Breno G. de Oliveira breno@rio.pm.org [ descaradamente roubado/adaptado das palestras de Ricardo Signes, Paul Fenwick, Audrey Tang e Leon Brocard e do perl5100delta.pod do Rafaël Garcia-Suarez ]
  3. 3. Perl 5.10 ● Nova versão do Perl! Yay! ● Mais rápido! ● Mais bonito! ● Mais eficiente! ● Novas features!
  4. 4. Perl 5.10 ● Muitas novidades! ● Muitas otimizações internas ● Muitas “pequenas grandes coisas” (especialmente em expressões regulares!) ● Vamos apenas arranhar a superfície ● perldoc perl5100delta
  5. 5. say – o print dos seus sonhos! ● Lembra quando você escrevia assim?     print “alo, mundo!n”;     print “$_n” foreach (@item) ● Agora, escreva assim!     say “alo, mundo!”;     say foreach (@item);
  6. 6. // – É um pássaro?! É uma ER?! Não! ● Lembra quando você escrevia assim?     $valor = defined $valor             ? $valor             : pega_valor(); ● E tentava escrever assim? (e quase conseguia)     $valor = $valor || pega_valor();
  7. 7. // – É um pássaro?! É uma ER?! Não! ● Lembra quando você escrevia assim?     $valor = defined $valor             ? $valor             : pega_valor(); ● Experimente assim!     $valor = $valor // pega_valor();
  8. 8. state – Variáveis “estáticas” ● Lembra quando você escrevia assim?       {          my $i = 0;          sub incrementa {              return $i++;          }       }
  9. 9. state – Variáveis “estáticas” ● Agora, escreva assim!       sub incrementa {           state $i = 0;           return $i++;       }
  10. 10. -X – testes de arquivos empilhados ● Lembra quando você escrevia assim?   if (­f $filename and ­w _ and ­z _)       unlink $filename;   } ● Agora, escreva assim!   if (­f ­w ­z $filename)       unlink $filename;   }
  11. 11. matches nominais! ● Lembra quando você escrevia assim?       if (m/             (w{3} )    # item             (d{2,})    # valor             (w*   )    # extra            /x         ) {             $item  = $1;             $valor = $2;             $extra = $3;       }
  12. 12. matches nominais! ● Agora, escreva assim!       if (m/             (?<item>  w{3} )             (?<valor> d{2,})             (?<extra> w*   )            /x         ) {             $item  = $+{item };             $valor = $+{valor};             $extra = $+{extra};       }
  13. 13. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100
  14. 14. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 100.00
  15. 15. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 100.00 1e2
  16. 16. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 100.00 1e2 “100”
  17. 17. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 100.00 1e2 “100” “100.000000”
  18. 18. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 “+100” 100.00 1e2 “100” “100.000000”
  19. 19. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 “+100” 100.00 “-100” 1e2 “100” “100.000000”
  20. 20. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 “+100” 100.00 “-100” 1e2 “ 100 ” “100” “100.000000”
  21. 21. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 “+100” 100.00 “-100” 1e2 “ 100 ” “100” 1000 “100.000000”
  22. 22. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 “+100” 100.00 “-100” 1e2 “ 100 ” “100” 1000 “100.000000” “vale 100”
  23. 23. ~~ um match “inteligente” ● Comparação DWIM      say “uhu!”  if  $a ~~ 100; 100 “+100” 100.00 “-100” 1e2 “ 100 ” “100” 1000 “100.000000” “vale 100”
  24. 24. ~~ um match “inteligente” ● Comparação DWIM    my @herois = qw(jaspion jiraya jiban);    say “uhu!”  if  @herois ~~  jiraya ;    say “uhu!”  if  @herois ~~ 'jiraya';    say “uhu!”  if  @herois ~~ “jiraya”;    say “uhu!”  if  @herois ~~ /jiraya/;
  25. 25. ~~ um match “inteligente” ● E a ordem não importa!    my @herois = qw(jaspion jiraya jiban);    say “uhu!”  if   jiraya  ~~ @herois;    say “uhu!”  if  'jiraya' ~~ @herois;    say “uhu!”  if  “jiraya” ~~ @herois;    say “uhu!”  if  /jiraya/ ~~ @herois;
  26. 26. switch – comparando eventos ● Lembra quando você escrevia assim?       if ($a == 1)        {  ...  }       elsif ($a == 2)     {  ...  }       elsif ($a == 7)     {  ...  }       elsif ($a == 13)    {  ...  }       elsif ($a =~ m/D/) {  ...  }       elsif ($a > 300)    {  ...  }       elsif ($a < 50)     {  ...  }       else                {  ...  }
  27. 27. switch – comparando eventos ● Agora, escreva assim!       given ($a) {          when (1)          {  ...  }          when (2)          {  ...  }          when (7)          {  ...  }          when (13)         {  ...  }          when (/D/)       {  ...  }          when ($_ > 300)   {  ...  }          when ($_ < 50)    {  ...  }          default           {  ...  }        }
  28. 28. FieldHashes – Inside-out nativo! ● Lembra quando você escrevia assim? { my %name_of = ();   sub new { ... }   ...   sub CLONE   { ... }   sub DESTROY { ... } }
  29. 29. FieldHashes – Inside-out nativo! ● Agora, escreva assim! use Hash::Util::FieldHash qw(fieldhash) { fieldhash my %name_of = ();   sub new { ... }   ... } ● Ou use Class::Std, ou Object::InsideOut ● ou Moose :-)
  30. 30. UNIVERSAL::DOES ● Agora você não depende mais de herança para saber se um determinado papel é desempenhado pela classe! package Aviao; sub DOES {    my ($self, $role) = @_;    return 1 if $role eq 'voar';        return $self­>SUPER::DOES($role); } if($coisa­>DOES ('voar') {    say “importa se sou avião ou passarinho?”; }
  31. 31. Ih, não funciona!!! As novas features da versão 5.10 são “opt-in”      use feature qw( say switch );      use feature ':5.10';      use 5.10.0; Literalmente :-)
  32. 32. Ih, não funciona!!! $ perl ­e 'say "alo, mundo"' String found where operator expected at ­e line 1,  near "say "alo, mundo""         (Do you need to predeclare say?) syntax error at ­e line 1, near "say "hello"" $ perl ­E 'say "alo, mundo"' alo, mundo $
  33. 33. Migre “djá”! ● Mas atenção! Há (raras) incompatibilidades: ➔ Variáveis especiais @+ e @- não são mais interpoladas em ERs ➔ pequenos ajustes nos templates de pack/unpack para sanar inconsistências ➔ $* e $# e construção (?p{}) foram removidas ➔ Muitas opções de tainting e segurança adicionadas/ajustadas
  34. 34. Novidades do Perl 5.10 Obrigado! Dúvidas? Breno G. de Oliveira breno@rio.pm.org

×