Perl Moderno, dia5

1,204
-1

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,204
On Slideshare
0
From Embeds
0
Number of Embeds
1
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

×