• Save
Perl Moderno, dia5
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Perl Moderno, dia5

  • 1,298 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,298
On Slideshare
1,298
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. PerlModerno.Breno G. de Oliveira garu@cpan.orgBruno C. Buss bbuss@cpan.org Perl Moderno
  • 2. Dia #5 Perl Moderno
  • 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. (revisitando)Criando Módulos Perl Moderno
  • 5. (revisitando)Criando Módulos Distribuições Perl Moderno
  • 6. Module::Starter Perl Moderno
  • 7. > module-starter --module=Meu::Modulo --author=“Meu Nome” --email=“meu@email” Perl Moderno
  • 8. Outros facilitadores para criação e atualização de módulos incluem Dist::Zilla e ShipIt Perl Moderno
  • 9. Documentação (POD) Perl Moderno
  • 10. =pod…=cut Perl Moderno
  • 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. Para facilitar a navegação pelo código, mova seu POD para o fim do arquivo, abaixo do demarcador __END__ Perl Moderno
  • 13. Testes Perl Moderno
  • 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. Coloque seus testes no diretóriot de sua distribuição, e utilize ocomando prove para executá-los > prove ­lvr t/ Perl Moderno
  • 16. Perl::Critic Perl Moderno
  • 17. > perlcritic meuprog.pl Perl Moderno
  • 18. http://perlcritic.com Perl Moderno
  • 19. Perl::Tidy Perl Moderno
  • 20. > perltidy meuprog.pl Perl Moderno
  • 21. Orientaçãoa Objetos Perl Moderno
  • 22. package Meu::Modulo;use 5.12.0;use warnings;sub minha_funcao { …}1; Perl Moderno
  • 23. package Meu::Modulo;use 5.12.0;use warnings;use Moose;sub minha_funcao { …}1; Perl Moderno
  • 24. package Meu::Modulo;use 5.12.0;use Moose;sub minha_funcao { …}1; Perl Moderno
  • 25. package Meu::Modulo;use 5.12.0;use Moose;sub minha_funcao { my $self = shift; …}1; Perl Moderno
  • 26. package Meu::Modulo;use 5.12.0;use Moose;sub meu_metodo { my $self = shift; …}1; Perl Moderno
  • 27. package Meu::Modulo;use 5.12.0;use Moose;sub meu_metodo { my ($self, @args) = @_; …}1; Perl Moderno
  • 28. package Meu::Modulo;use 5.12.0;use Moose;has x, is => rw;sub meu_metodo { my ($self, @args) = @_; …}1; Perl Moderno
  • 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. 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. 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. 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. 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. 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. 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. Meta-Object Protocol (MOP) Perl Moderno
  • 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. 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. 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. 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. 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. 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. Bancos de Dados Perl Moderno
  • 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. 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. 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. 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. Web Crawling Perl Moderno
  • 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. 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. Não faça parsing de HTML com expressões regulares. UtilizeHTML::TreeBuilder, Mojo::DOM ou equivalentes Perl Moderno
  • 52. Web Perl Moderno
  • 53. use Mojolicious::Lite;get / => sub { my $self = shift; $self->render_text( Alo, Mundo! );};app->start; Perl Moderno
  • 54. > perl meuprog.pl daemon Perl Moderno
  • 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. 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. 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. Obrigado!Dúvidas? Perl Moderno