SlideShare una empresa de Scribd logo
1 de 58
Perl
Moderno.
Breno G. de Oliveira   garu@cpan.org
Bruno C. Buss          bbuss@cpan.org




                                        Perl Moderno
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 DateTime
. Path::Class, Config::Any e Log4perl
. Criando módulos (e exportando)
. Usando módulos locais (e importando)

                               Perl Moderno
(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


                             Perl Moderno
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_funcao()> recebe B<SEMPRE>
Um número, e retorna I<verdadeiro> se o
número for maior que zero.

=cut
                                  Perl Moderno
Para facilitar a navegação pelo código,
 mova seu POD para o fim do arquivo,
    abaixo do demarcador __END__


                               Perl Moderno
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' );

is_deeply(
    $var,
    { chave => [42,-1] },
    'valor padrão'
) or diag explain $var;

done_testing;
                                    Perl Moderno
Coloque seus testes no diretório
t de sua distribuição, e utilize o
comando prove para executá-los

        > prove ­lvr t/
                             Perl Moderno
Perl::Critic


               Perl Moderno
> perlcritic meuprog.pl




                    Perl Moderno
http://perlcritic.com
                    Perl Moderno
Perl::Tidy


             Perl Moderno
> perltidy meuprog.pl




                   Perl Moderno
Orientação
a 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 Moderno
package Meu::Modulo;
use 5.12.0;
use Moose;

has 'x', is => 'rw';

sub meu_metodo {
  my ($self, @args) = @_;
  …
}

1;



                            Perl Moderno
package Meu::Modulo;
use 5.12.0;
use Moose;

has 'x', is => 'rw', isa => 'Int';

sub meu_metodo {
  my ($self, @args) = @_;
  …
}

1;



                                     Perl Moderno
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
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
use Meu::Modulo;

my $objeto = Meu::Modulo->new;

say $objeto->x;     # 0

$objeto->meu_metodo();

$objeto->x( 42 );

say $objeto->x; # 42



                                 Perl Moderno
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
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
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
Meta-Object Protocol
      (MOP)



                 Perl Moderno
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;        # 42
say $objeto->meu_metodo;      # erro!




                                        Perl Moderno
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
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
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
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
Moose é um Sistema de Objetos
 completo, estável e robusto, criado
a partir de lições de CLOS, Smalltalk,
    Perl 6, e muitos outros. Veja
       mais em Moose::Manual
                              Perl Moderno
Bancos de Dados



            Perl Moderno
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
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
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
Veja DBIx::Class, Rose::DB::Object
      e Fey::ORM para modelos
objeto-relacionais, e SQL::Translator
 para conversão e SQL entre bancos

                              Perl Moderno
Web Crawling



           Perl Moderno
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
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
Não faça parsing de HTML com
 expressões regulares. Utilize
HTML::TreeBuilder, Mojo::DOM
       ou equivalentes

                          Perl Moderno
Web



      Perl Moderno
use Mojolicious::Lite;

get '/' => sub {
     my $self = shift;
     $self->render_text( 'Alo, Mundo!' );
};

app->start;




                                            Perl Moderno
> perl meuprog.pl daemon




                     Perl Moderno
use Mojolicious::Lite;

get '/:usuario' => sub {
     my $self = shift;
     my $nome = $self->param('usuario');
     $self->render_text( “Alo, $nome!” );
};

app->start;




                                            Perl Moderno
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
Mojolicious é simples de usar e com
   muitos recursos. Dancer é também
uma 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
Obrigado!
Dúvidas?

           Perl Moderno

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Php 02 Primeiros Passos
Php 02 Primeiros PassosPhp 02 Primeiros Passos
Php 02 Primeiros Passos
 
Shell script
Shell scriptShell script
Shell script
 
JasperReports
JasperReportsJasperReports
JasperReports
 
Python Class
Python ClassPython Class
Python Class
 
Introdução às Redes Neurais com PHP
Introdução às Redes Neurais com PHPIntrodução às Redes Neurais com PHP
Introdução às Redes Neurais com PHP
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHP
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell Script
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - Funções
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Arrays PHP - Criação de sites II
Arrays PHP - Criação de sites IIArrays PHP - Criação de sites II
Arrays PHP - Criação de sites II
 
Al sweigart, cap 3
Al sweigart, cap 3Al sweigart, cap 3
Al sweigart, cap 3
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites II
 
Introdução ao Ruby
Introdução ao RubyIntrodução ao Ruby
Introdução ao Ruby
 
Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell Script
 
Poo com php
Poo com phpPoo com php
Poo com php
 
Php
PhpPhp
Php
 

Similar a Perl Moderno, dia5

PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraFlávio Lisboa
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)Pablo Dall'Oglio
 
Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Israel Messias
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPguilhermemar
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkMarcelo Rodrigo
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHPAugusto das Neves
 
Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Program...
Aula 09  - Instruções preparadas e otimização de consultas do Mysql - Program...Aula 09  - Instruções preparadas e otimização de consultas do Mysql - Program...
Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Program...Dalton Martins
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009silva.edgar
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comandogarux
 
PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)Silvano Oliveira
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECLW3P Projetos Web
 

Similar a Perl Moderno, dia5 (20)

PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)
 
Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHP
 
Aprofunde se no php 5.3
Aprofunde se no php 5.3Aprofunde se no php 5.3
Aprofunde se no php 5.3
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
 
Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Program...
Aula 09  - Instruções preparadas e otimização de consultas do Mysql - Program...Aula 09  - Instruções preparadas e otimização de consultas do Mysql - Program...
Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Program...
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 
Pdo do PHP Palestra
Pdo do PHP PalestraPdo do PHP Palestra
Pdo do PHP Palestra
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
 
PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 

Más de garux

Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6garux
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perlgarux
 
Communities - Perl edition (RioJS)
Communities - Perl edition (RioJS)Communities - Perl edition (RioJS)
Communities - Perl edition (RioJS)garux
 
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensaSeja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensagarux
 
Game Development with SDL and Perl
Game Development with SDL and PerlGame Development with SDL and Perl
Game Development with SDL and Perlgarux
 
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao MooseOrientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moosegarux
 
Perl Quiz 2009 (YAPC::BR)
Perl Quiz 2009 (YAPC::BR)Perl Quiz 2009 (YAPC::BR)
Perl Quiz 2009 (YAPC::BR)garux
 
Jogos em Perl
Jogos em PerlJogos em Perl
Jogos em Perlgarux
 
Logging e depuração enterprise-level com Log4perl
Logging e depuração enterprise-level com Log4perlLogging e depuração enterprise-level com Log4perl
Logging e depuração enterprise-level com Log4perlgarux
 
Novidades no Perl 5.10
Novidades no Perl 5.10Novidades no Perl 5.10
Novidades no Perl 5.10garux
 

Más de garux (10)

Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perl
 
Communities - Perl edition (RioJS)
Communities - Perl edition (RioJS)Communities - Perl edition (RioJS)
Communities - Perl edition (RioJS)
 
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensaSeja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
 
Game Development with SDL and Perl
Game Development with SDL and PerlGame Development with SDL and Perl
Game Development with SDL and Perl
 
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao MooseOrientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
 
Perl Quiz 2009 (YAPC::BR)
Perl Quiz 2009 (YAPC::BR)Perl Quiz 2009 (YAPC::BR)
Perl Quiz 2009 (YAPC::BR)
 
Jogos em Perl
Jogos em PerlJogos em Perl
Jogos em Perl
 
Logging e depuração enterprise-level com Log4perl
Logging e depuração enterprise-level com Log4perlLogging e depuração enterprise-level com Log4perl
Logging e depuração enterprise-level com Log4perl
 
Novidades no Perl 5.10
Novidades no Perl 5.10Novidades no Perl 5.10
Novidades no Perl 5.10
 

Perl Moderno, dia5