Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Novidades no Perl 5.10

960 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
  • Be the first to comment

  • Be the first to like this

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

×