SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
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)
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)
1.
Novidades do Perl
5.10
Breno G. de Oliveira
breno@rio.pm.org
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.
Perl 5.10
● Nova versão do Perl! Yay!
● Mais rápido!
● Mais bonito!
● Mais eficiente!
● Novas features!
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.
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.
// – É 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.
// – É 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.
state – Variáveis “estáticas”
● Lembra quando você escrevia assim?
{
my $i = 0;
sub incrementa {
return $i++;
}
}
9.
state – Variáveis “estáticas”
● Agora, escreva assim!
sub incrementa {
state $i = 0;
return $i++;
}
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.
matches nominais!
● Lembra quando você escrevia assim?
if (m/
(w{3} ) # item
(d{2,}) # valor
(w* ) # extra
/x
) {
$item = $1;
$valor = $2;
$extra = $3;
}
13.
~~ um match “inteligente”
● Comparação DWIM
say “uhu!” if $a ~~ 100;
100
14.
~~ um match “inteligente”
● Comparação DWIM
say “uhu!” if $a ~~ 100;
100
100.00
15.
~~ um match “inteligente”
● Comparação DWIM
say “uhu!” if $a ~~ 100;
100
100.00
1e2
16.
~~ um match “inteligente”
● Comparação DWIM
say “uhu!” if $a ~~ 100;
100
100.00
1e2
“100”
17.
~~ um match “inteligente”
● Comparação DWIM
say “uhu!” if $a ~~ 100;
100
100.00
1e2
“100”
“100.000000”
18.
~~ um match “inteligente”
● Comparação DWIM
say “uhu!” if $a ~~ 100;
100 “+100”
100.00
1e2
“100”
“100.000000”
19.
~~ um match “inteligente”
● Comparação DWIM
say “uhu!” if $a ~~ 100;
100 “+100”
100.00 “-100”
1e2
“100”
“100.000000”
20.
~~ um match “inteligente”
● Comparação DWIM
say “uhu!” if $a ~~ 100;
100 “+100”
100.00 “-100”
1e2 “ 100 ”
“100”
“100.000000”
21.
~~ um match “inteligente”
● Comparação DWIM
say “uhu!” if $a ~~ 100;
100 “+100”
100.00 “-100”
1e2 “ 100 ”
“100” 1000
“100.000000”
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.
~~ 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.
~~ 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.
~~ 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;
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.
FieldHashes – Inside-out nativo!
● Lembra quando você escrevia assim?
{
my %name_of = ();
sub new { ... }
...
sub CLONE { ... }
sub DESTROY { ... }
}
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.
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.
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.
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.
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.
Novidades do Perl 5.10
Obrigado!
Dúvidas?
Breno G. de Oliveira
breno@rio.pm.org
0 likes
Be the first to like this
Views
Total views
1,100
On SlideShare
0
From Embeds
0
Number of Embeds
1
You have now unlocked unlimited access to 20M+ documents!
Unlimited Reading
Learn faster and smarter from top experts
Unlimited Downloading
Download to take your learnings offline and on the go
You also get free access to Scribd!
Instant access to millions of ebooks, audiobooks, magazines, podcasts and more.
Read and listen offline with any device.
Free access to premium services like Tuneln, Mubi and more.