PerlModerno.Breno G. de Oliveira   garu@cpan.orgBruno C. Buss          bbuss@cpan.org                                     ...
Dia #5         Perl Moderno
Revisão. Expressões Regulares. Capture::Tiny pra capturar saída. eval e Try::Tiny para exceções. time, localtime e DateTim...
(revisitando)Criando Módulos                  Perl Moderno
(revisitando)Criando Módulos      Distribuições                  Perl Moderno
Module::Starter             Perl Moderno
> module-starter    --module=Meu::Modulo    --author=“Meu Nome”    --email=“meu@email”                    Perl Moderno
Outros facilitadores para criação e atualização de módulos incluem        Dist::Zilla e ShipIt                            ...
Documentação    (POD)          Perl Moderno
=pod…=cut       Perl Moderno
=pod=head1 SINOPSE   use Meu::Modulo;   minha_funcao( 42 );=head1 FUNÇÕES=head2 minha_funcao( NUMERO )A função C<minha_fun...
Para facilitar a navegação pelo código, mova seu POD para o fim do arquivo,    abaixo do demarcador __END__               ...
Testes         Perl Moderno
use Test::More;use_ok( Meu::Modulo );my $var = minha_funcao();ok( $var == 42, valor padrão );is( $var, 42, valor padrão );...
Coloque seus testes no diretóriot de sua distribuição, e utilize ocomando prove para executá-los        > prove ­lvr t/   ...
Perl::Critic               Perl Moderno
> perlcritic meuprog.pl                    Perl Moderno
http://perlcritic.com                    Perl Moderno
Perl::Tidy             Perl Moderno
> perltidy meuprog.pl                   Perl Moderno
Orientaçãoa Objetos             Perl Moderno
package Meu::Modulo;use 5.12.0;use warnings;sub minha_funcao {  …}1;                       Perl Moderno
package Meu::Modulo;use 5.12.0;use warnings;use Moose;sub minha_funcao {  …}1;                       Perl Moderno
package Meu::Modulo;use 5.12.0;use Moose;sub minha_funcao {  …}1;                       Perl Moderno
package Meu::Modulo;use 5.12.0;use Moose;sub minha_funcao {  my $self = shift;  …}1;                       Perl Moderno
package Meu::Modulo;use 5.12.0;use Moose;sub meu_metodo {  my $self = shift;  …}1;                       Perl Moderno
package Meu::Modulo;use 5.12.0;use Moose;sub meu_metodo {  my ($self, @args) = @_;  …}1;                            Perl M...
package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw;sub meu_metodo {  my ($self, @args) = @_;  …}1;                  ...
package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int;sub meu_metodo {  my ($self, @args) = @_;  …}1;      ...
package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo {  my ($self, @args) = @...
package Meu::Modulo;use 5.12.0;use Moose;has x => (   is      => rw,   isa     => Int,   default => 0,);sub meu_metodo {  ...
use Meu::Modulo;my $objeto = Meu::Modulo->new;say $objeto->x;     # 0$objeto->meu_metodo();$objeto->x( 42 );say $objeto->x...
use Meu::Modulo;my $objeto = Meu::Modulo->new( x => 8 );say $objeto->x;     # 8$objeto->meu_metodo();$objeto->x( 42 );say ...
package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo {  my ($self, @args) = @...
package Meu::Modulo::Filho;use 5.12.0;use Moose;extends Meu::Modulo;before meu_metodo => sub {   say vou chamar o método!;...
Meta-Object Protocol      (MOP)                 Perl Moderno
use Meu::Modulo;my $objeto = Meu::Modulo->new;$objeto->meta->add_method(    resposta => sub { say 42 } );$objeto->meta->re...
package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo {  my ($self, @args) = @...
package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo {  my ($self, @args) = @...
package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo {  my ($self, @args) = @...
package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo {  my ($self, @args) = @...
Moose é um Sistema de Objetos completo, estável e robusto, criadoa partir de lições de CLOS, Smalltalk,    Perl 6, e muito...
Bancos de Dados            Perl Moderno
use DBI;my $dbh = DBI->connect(   dbi:mysql:database=BANCO;host=IP;port=PORTA,   meu_usuario,   minha_senha,   { RaiseErro...
use DBI;my $dbh = DBI->connect(   dbi:Pg:database=BANCO;host=IP;port=PORTA,   meu_usuario,   minha_senha,   { RaiseError =...
use DBI;my $dbh = DBI->connect(   dbi:Oracle:database=BANCO;host=IP;port=PORTA,   meu_usuario,   minha_senha,   { RaiseErr...
Veja DBIx::Class, Rose::DB::Object      e Fey::ORM para modelosobjeto-relacionais, e SQL::Translator para conversão e SQL ...
Web Crawling           Perl Moderno
use WWW::Mechanize;my $mech = WWW::Mechanize->new;$mech->get(http://exemplo.com);$mech->follow_link(text => Clique Aqui!);...
use Mojo::Client;my $url = http://www.google.com/search?q=mojolicious;Mojo::Client->new->get($url) ->res->dom->find(h3.r a...
Não faça parsing de HTML com expressões regulares. UtilizeHTML::TreeBuilder, Mojo::DOM       ou equivalentes              ...
Web      Perl Moderno
use Mojolicious::Lite;get / => sub {     my $self = shift;     $self->render_text( Alo, Mundo! );};app->start;            ...
> perl meuprog.pl daemon                     Perl Moderno
use Mojolicious::Lite;get /:usuario => sub {     my $self = shift;     my $nome = $self->param(usuario);     $self->render...
use Mojolicious::Lite;get /:usuario => sub {  my $self = shift;  my $nome = $self->param(usuario);  $self->stash( nome => ...
Mojolicious é simples de usar e com   muitos recursos. Dancer é tambémuma alternativa popular. Mas o framework  mais estáv...
Obrigado!Dúvidas?           Perl Moderno
Upcoming SlideShare
Loading in...5
×

Perl Moderno, dia5

1,132

Published on

Curso de verão para alunos de graduação e pós-graduação da UFRJ

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

No Downloads
Views
Total Views
1,132
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Perl Moderno, dia5

  1. 1. PerlModerno.Breno G. de Oliveira garu@cpan.orgBruno C. Buss bbuss@cpan.org Perl Moderno
  2. 2. Dia #5 Perl Moderno
  3. 3. Revisão. Expressões Regulares. Capture::Tiny pra capturar saída. eval e Try::Tiny para exceções. time, localtime e DateTime. Path::Class, Config::Any e Log4perl. Criando módulos (e exportando). Usando módulos locais (e importando) Perl Moderno
  4. 4. (revisitando)Criando Módulos Perl Moderno
  5. 5. (revisitando)Criando Módulos Distribuições Perl Moderno
  6. 6. Module::Starter Perl Moderno
  7. 7. > module-starter --module=Meu::Modulo --author=“Meu Nome” --email=“meu@email” Perl Moderno
  8. 8. Outros facilitadores para criação e atualização de módulos incluem Dist::Zilla e ShipIt Perl Moderno
  9. 9. Documentação (POD) Perl Moderno
  10. 10. =pod…=cut Perl Moderno
  11. 11. =pod=head1 SINOPSE use Meu::Modulo; minha_funcao( 42 );=head1 FUNÇÕES=head2 minha_funcao( NUMERO )A função C<minha_funcao()> recebe B<SEMPRE>Um número, e retorna I<verdadeiro> se onúmero for maior que zero.=cut Perl Moderno
  12. 12. Para facilitar a navegação pelo código, mova seu POD para o fim do arquivo, abaixo do demarcador __END__ Perl Moderno
  13. 13. Testes Perl Moderno
  14. 14. use Test::More;use_ok( Meu::Modulo );my $var = minha_funcao();ok( $var == 42, valor padrão );is( $var, 42, valor padrão );is_deeply( $var, { chave => [42,-1] }, valor padrão) or diag explain $var;done_testing; Perl Moderno
  15. 15. Coloque seus testes no diretóriot de sua distribuição, e utilize ocomando prove para executá-los > prove ­lvr t/ Perl Moderno
  16. 16. Perl::Critic Perl Moderno
  17. 17. > perlcritic meuprog.pl Perl Moderno
  18. 18. http://perlcritic.com Perl Moderno
  19. 19. Perl::Tidy Perl Moderno
  20. 20. > perltidy meuprog.pl Perl Moderno
  21. 21. Orientaçãoa Objetos Perl Moderno
  22. 22. package Meu::Modulo;use 5.12.0;use warnings;sub minha_funcao { …}1; Perl Moderno
  23. 23. package Meu::Modulo;use 5.12.0;use warnings;use Moose;sub minha_funcao { …}1; Perl Moderno
  24. 24. package Meu::Modulo;use 5.12.0;use Moose;sub minha_funcao { …}1; Perl Moderno
  25. 25. package Meu::Modulo;use 5.12.0;use Moose;sub minha_funcao { my $self = shift; …}1; Perl Moderno
  26. 26. package Meu::Modulo;use 5.12.0;use Moose;sub meu_metodo { my $self = shift; …}1; Perl Moderno
  27. 27. package Meu::Modulo;use 5.12.0;use Moose;sub meu_metodo { my ($self, @args) = @_; …}1; Perl Moderno
  28. 28. package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw;sub meu_metodo { my ($self, @args) = @_; …}1; Perl Moderno
  29. 29. package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int;sub meu_metodo { my ($self, @args) = @_; …}1; Perl Moderno
  30. 30. package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo { my ($self, @args) = @_; …}1; Perl Moderno
  31. 31. package Meu::Modulo;use 5.12.0;use Moose;has x => ( is => rw, isa => Int, default => 0,);sub meu_metodo { my ($self, @args) = @_; …}1; Perl Moderno
  32. 32. use Meu::Modulo;my $objeto = Meu::Modulo->new;say $objeto->x; # 0$objeto->meu_metodo();$objeto->x( 42 );say $objeto->x; # 42 Perl Moderno
  33. 33. use Meu::Modulo;my $objeto = Meu::Modulo->new( x => 8 );say $objeto->x; # 8$objeto->meu_metodo();$objeto->x( 42 );say $objeto->x; # 42 Perl Moderno
  34. 34. package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo { my ($self, @args) = @_; …}1; Perl Moderno
  35. 35. package Meu::Modulo::Filho;use 5.12.0;use Moose;extends Meu::Modulo;before meu_metodo => sub { say vou chamar o método!;};1; Perl Moderno
  36. 36. Meta-Object Protocol (MOP) Perl Moderno
  37. 37. use Meu::Modulo;my $objeto = Meu::Modulo->new;$objeto->meta->add_method( resposta => sub { say 42 } );$objeto->meta->remove_method(meu_metodo);say $objeto->resposta; # 42say $objeto->meu_metodo; # erro! Perl Moderno
  38. 38. package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo { my ($self, @args) = @_; …}1; Perl Moderno
  39. 39. package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo { my ($self, @args) = @_; …}Meu::Modulo->meta->make_immutable;1; Perl Moderno
  40. 40. package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo { my ($self, @args) = @_; …}Meu::Modulo->meta->make_immutable; Perl Moderno
  41. 41. package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw, isa => Int, default => 0;sub meu_metodo { my ($self, @args) = @_; …}__PACKAGE__->meta->make_immutable; Perl Moderno
  42. 42. Moose é um Sistema de Objetos completo, estável e robusto, criadoa partir de lições de CLOS, Smalltalk, Perl 6, e muitos outros. Veja mais em Moose::Manual Perl Moderno
  43. 43. Bancos de Dados Perl Moderno
  44. 44. use DBI;my $dbh = DBI->connect( dbi:mysql:database=BANCO;host=IP;port=PORTA, meu_usuario, minha_senha, { RaiseError => 1, AutoCommit => 1 });my $sth = $dbh->prepare( SELECT * FROM pessoas WHERE nome=?);$sth->execute( $nome );while( my $linha = $sth->fetchrow_hashref ) { say $linha->{idade};}$dbh->disconnect; Perl Moderno
  45. 45. use DBI;my $dbh = DBI->connect( dbi:Pg:database=BANCO;host=IP;port=PORTA, meu_usuario, minha_senha, { RaiseError => 1, AutoCommit => 1 });my $sth = $dbh->prepare( SELECT * FROM pessoas WHERE nome=?);$sth->execute( $nome );while( my $linha = $sth->fetchrow_hashref ) { say $linha->{idade};}$dbh->disconnect; Perl Moderno
  46. 46. use DBI;my $dbh = DBI->connect( dbi:Oracle:database=BANCO;host=IP;port=PORTA, meu_usuario, minha_senha, { RaiseError => 1, AutoCommit => 1 });my $sth = $dbh->prepare( SELECT * FROM pessoas WHERE nome=?);$sth->execute( $nome );while( my $linha = $sth->fetchrow_hashref ) { say $linha->{idade};}$dbh->disconnect; Perl Moderno
  47. 47. Veja DBIx::Class, Rose::DB::Object e Fey::ORM para modelosobjeto-relacionais, e SQL::Translator para conversão e SQL entre bancos Perl Moderno
  48. 48. Web Crawling Perl Moderno
  49. 49. use WWW::Mechanize;my $mech = WWW::Mechanize->new;$mech->get(http://exemplo.com);$mech->follow_link(text => Clique Aqui!);$mech->submit_form( with_fields => { nome => Raul Seixas, idade => 10_000, apelido => Maluco Beleza,});say $mech->content; Perl Moderno
  50. 50. use Mojo::Client;my $url = http://www.google.com/search?q=mojolicious;Mojo::Client->new->get($url) ->res->dom->find(h3.r a) ->each( sub { say shift->all_text } ); Perl Moderno
  51. 51. Não faça parsing de HTML com expressões regulares. UtilizeHTML::TreeBuilder, Mojo::DOM ou equivalentes Perl Moderno
  52. 52. Web Perl Moderno
  53. 53. use Mojolicious::Lite;get / => sub { my $self = shift; $self->render_text( Alo, Mundo! );};app->start; Perl Moderno
  54. 54. > perl meuprog.pl daemon Perl Moderno
  55. 55. use Mojolicious::Lite;get /:usuario => sub { my $self = shift; my $nome = $self->param(usuario); $self->render_text( “Alo, $nome!” );};app->start; Perl Moderno
  56. 56. use Mojolicious::Lite;get /:usuario => sub { my $self = shift; my $nome = $self->param(usuario); $self->stash( nome => $nome );} => index;app->start;__DATA__@@ index.html.ep<html><body> Alo, <%= $nome %></body></html> Perl Moderno
  57. 57. Mojolicious é simples de usar e com muitos recursos. Dancer é tambémuma alternativa popular. Mas o framework mais estável e robusto em Perl hoje chama-se Catalyst, usado em sites complexos e de altíssimo tráfego. Perl Moderno
  58. 58. Obrigado!Dúvidas? Perl Moderno

×