Novidades no Perl 5.10

34
Novidades do Perl 5.10 Breno G. de Oliveira [email protected]

description

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)

Transcript of Novidades no Perl 5.10

Page 1: Novidades no Perl 5.10

Novidades do Perl

5.10Breno G. de [email protected]

Page 2: Novidades no Perl 5.10

Novidades do Perl

5.10Breno G. de [email protected]

descaradamente roubado/adaptado das palestras deRicardo Signes, Paul Fenwick, Audrey Tang e Leon Brocard

e do perl5100delta.pod do Rafaël Garcia-Suarez[ ]

Page 3: Novidades no Perl 5.10

Perl 5.10

● Nova versão do Perl! Yay!

● Mais rápido!

● Mais bonito!

● Mais eficiente!

● Novas features!

Page 4: Novidades no Perl 5.10

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

Page 5: Novidades no Perl 5.10

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);

Page 6: Novidades no Perl 5.10

// – É 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();

Page 7: Novidades no Perl 5.10

// – É um pássaro?! É uma ER?! Não!

● Lembra quando você escrevia assim?

    $valor = defined $valor            ? $valor            : pega_valor();

● Experimente assim!

    $valor = $valor // pega_valor();

Page 8: Novidades no Perl 5.10

state – Variáveis “estáticas”

● Lembra quando você escrevia assim?

      {         my $i = 0;         sub incrementa {             return $i++;         }      }

Page 9: Novidades no Perl 5.10

state – Variáveis “estáticas”

● Agora, escreva assim!

      sub incrementa {          state $i = 0;          return $i++;      }

Page 10: Novidades no Perl 5.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;  }

Page 11: Novidades no Perl 5.10

matches nominais!

● Lembra quando você escrevia assim?

      if (m/            (\w{3} )    # item            (\d{2,})    # valor            (\w*   )    # extra           /x        ) {            $item  = $1;            $valor = $2;            $extra = $3;      }

Page 12: Novidades no Perl 5.10

matches nominais!

● Agora, escreva assim!

      if (m/            (?<item>  \w{3} )            (?<valor> \d{2,})            (?<extra> \w*   )           /x        ) {            $item  = $+{item };            $valor = $+{valor};            $extra = $+{extra};      }

Page 13: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100

Page 14: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00

Page 15: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00 1e2

Page 16: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00 1e2 “100”

Page 17: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00 1e2 “100” “100.000000”

Page 18: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00 1e2 “100” “100.000000”

“+100”

Page 19: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00 1e2 “100” “100.000000”

“+100” “-100”

Page 20: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00 1e2 “100” “100.000000”

“+100” “-100” “ 100 ”

Page 21: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00 1e2 “100” “100.000000”

“+100” “-100” “ 100 ” 1000

Page 22: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00 1e2 “100” “100.000000”

“+100” “-100” “ 100 ” 1000 “vale 100”

Page 23: Novidades no Perl 5.10

~~ um match “inteligente”

● Comparação DWIM

     say “uhu!”  if  $a ~~ 100;

100 100.00 1e2 “100” “100.000000”

“+100” “-100” “ 100 ” 1000 “vale 100”

Page 24: Novidades no Perl 5.10

~~ 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/;

Page 25: Novidades no Perl 5.10

~~ 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;

Page 26: Novidades no Perl 5.10

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                {  ...  }

Page 27: Novidades no Perl 5.10

switch – comparando eventos

● Agora, escreva assim!

      given ($a) {         when (1)          {  ...  }         when (2)          {  ...  }         when (7)          {  ...  }         when (13)         {  ...  }         when (/\D/)       {  ...  }         when ($_ > 300)   {  ...  }         when ($_ < 50)    {  ...  }         default           {  ...  }       }

Page 28: Novidades no Perl 5.10

FieldHashes – Inside-out nativo!

● Lembra quando você escrevia assim?

{my %name_of = ();

  sub new { ... }

  ...

  sub CLONE   { ... }  sub DESTROY { ... }}

Page 29: Novidades no Perl 5.10

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 :-)

Page 30: Novidades no Perl 5.10

UNIVERSAL::DOES

● Agora você não depende mais de herançapara 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?”;}

Page 31: Novidades no Perl 5.10

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 :-)

Page 32: Novidades no Perl 5.10

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$

Page 33: Novidades no Perl 5.10

Migre “djá”!

● Mas atenção! Há (raras) incompatibilidades:

➔Variáveis especiais @+ e @- não são maisinterpoladas 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çaadicionadas/ajustadas

Page 34: Novidades no Perl 5.10

Obrigado!

Dúvidas?

Novidades do Perl 5.10

Breno G. de [email protected]