SlideShare a Scribd company logo
1 of 112
Perl
Moderno.
Breno G. de Oliveira   garu@cpan.org
Bruno C. Buss          bbuss@cpan.org




                                        Perl Moderno
Dia #3


         Perl Moderno
Revisão


  . Operadores quote-like
  . Executando programas externos
  . Arrays e funções para listas
  . Contextos
  . Hashes e funções para hashes



                               Perl Moderno
Referências



              Perl Moderno
crie referências colocando
uma barra invertida “” na
     frente da variável

                      Perl Moderno
my @numeros = ( 'um', 'dois', 'três' );

my $num_ref = @numeros;




                                  Perl Moderno
my @lista = ( 1, 7, @outra_lista, 5 );



    ( cópia dos elementos de @outra_lista )




                                      Perl Moderno
my @lista = ( 1, 7, @outra_lista, 5 );



     ( apenas 1 elemento em @lista! )




                                        Perl Moderno
my %stones = (
   'voz'       =>   'Jagger',
   'guitarra' =>    'Richards',
   'baixo'     =>   'Wyman',
   'bateria' =>     'Watts',
);

my $banda_ref = %stones;



                           Perl Moderno
você pode pular o
  “passo intermediário” e criar
referências anônimas, usando []
  para arrays e {} para hashes

                         Perl Moderno
my @numeros = ( 'um', 'dois', 'três' );

my $num_ref = @numeros;




                                  Perl Moderno
my $num_ref = [ 'um', 'dois', 'três' ];




                                   Perl Moderno
my %stones = (
   'voz'       =>   'Jagger',
   'guitarra' =>    'Richards',
   'baixo'     =>   'Wyman',
   'bateria' =>     'Watts',
);

my $banda_ref = %stones;



                           Perl Moderno
my $banda_ref   ={
   'voz'        => 'Jagger',
   'guitarra'   => 'Richards',
   'baixo'      => 'Wyman',
   'bateria'    => 'Watts',
};




                          Perl Moderno
desfaça referências colocando-a
entre chaves onde você normalmente
    escreveria o nome da variável


                           Perl Moderno
@numeros


           Perl Moderno
@{   }


     Perl Moderno
@{ $ref   }


          Perl Moderno
$numeros[1]


          Perl Moderno
${   }[1]


        Perl Moderno
${ $ref }[1]


           Perl Moderno
my @numeros = ( 'um', 'dois', 'três' );

my $num_ref = @numeros;

my @outro = @{ $num_ref };




                                  Perl Moderno
my @numeros = ( 'um', 'dois', 'três' );

my $num_ref = @numeros;

my @outro = @{ $num_ref };

my $valor = ${ $num_ref }[2];




                                  Perl Moderno
na hora de desfazer referências,
 as chaves são opcionais. Use
    quando for mais legível

                          Perl Moderno
@{ $ref   }


          Perl Moderno
@$ref


        Perl Moderno
@$ref   √

            Perl Moderno
${ $ref }[1]


           Perl Moderno
$$ref [1]


            Perl Moderno
?

$$ref [1] [2]


                Perl Moderno
?

${ $ref [1] }[2]


              Perl Moderno
${ $ref }[1] [2]


              Perl Moderno
$$ref [1] [2]


                Perl Moderno
utilize $ref->
em vez de ${ $ref } ou $$ref
  para acessar elementos

                        Perl Moderno
${ $ref }[1]


           Perl Moderno
$ref->[1]


            Perl Moderno
my $extenso = {
    'um' => 1,
    'dois' => 2,
};


say $extenso->{'dois'};




                          Perl Moderno
my $extenso = {
    'um' => 1,
    'dois' => 2,
};


foreach my $chave ( keys %{$extenso} ) {
    say $extenso->{$chave};
}




                                Perl Moderno
my $extenso = {
    'um' => 1,
    'dois' => 2,
};


foreach my $chave ( keys %$extenso ) {
    say $extenso->{$chave};
}




                                Perl Moderno
my $var = {
    'um' => 1,
    'dois' => 2,
};

say ref $var;

HASH




                   Perl Moderno
my $var = [ 1, 2 ];

say ref $var;

ARRAY




                      Perl Moderno
Estruturas Complexas



                Perl Moderno
my @matriz = (
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ],
);

say $matriz[1]->[2];




                       Perl Moderno
my @matriz = (
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ],
);

say $matriz[1]->[2];

6


                       Perl Moderno
my @matriz = (
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ],
);

say $matriz[1][2];

6


                     Perl Moderno
entre chaves/colchetes,
  a “seta” é opcional

                    Perl Moderno
my @matriz = (
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ],
);

say $matriz[1][2];

6


                     Perl Moderno
my $matriz = [
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ],
];

say $matriz->[1][2];

6


                       Perl Moderno
my $complicado = [
   {
      um => [ 1,
              2,
              [ 3,
                 'bla',
                 { resposta => 42 },
              ],
              {
                  4 => 5,
                  6 => [ 7, 8, 9 ],
              },
      ],
   },
   5,
];




                                       Perl Moderno
my $complicado = [
   {
      um => [ 1,
              2,
              [ 3,
                 'bla',
                 { resposta => 42 },
              ],
              {
                  4 => 5,
                  6 => [ 7, 8, 9 ],
              },
      ],
   },
   5,
];

say $complicado->[0]{um}[2][2]{resposta};
42
                                            Perl Moderno
inspecione estruturas complexas
com módulos como Data::Dumper,
     Data::Dump::Streamer ou
           Data::Printer

                          Perl Moderno
Funções



          Perl Moderno
sub minha_funcao {
    …
}



                Perl Moderno
sub minha_funcao {
    …
}


minha_funcao();


                     Perl Moderno
sub minha_funcao {
    return 42;
}


my $valor = minha_funcao();


                        Perl Moderno
sub minha_funcao {
    return (1, 2, 3);
}


my @valores = minha_funcao();


                        Perl Moderno
Passando parâmetros




                Perl Moderno
minha_funcao( 'foo' );




                    Perl Moderno
minha_funcao( 1, 2, 3 );




                    Perl Moderno
@_

     Perl Moderno
sub minha_funcao {
    my @parametros = @_;
}


minha_funcao(42);


                           Perl Moderno
sub minha_funcao {
    my ($valor1, $valor2) = @_;
}


minha_funcao(42);


                          Perl Moderno
sub minha_funcao {
    my $valor = $_[0];
}


minha_funcao(42);


                         Perl Moderno
sub minha_funcao {
    my $valor = shift @_;
}


minha_funcao(42);


                            Perl Moderno
sub minha_funcao {
    my $valor = shift;
}


minha_funcao(42);


                         Perl Moderno
sub minha_funcao {
   die “argumentos insuficientes”
      unless @_ > 2;
}

minha_funcao();




                               Perl Moderno
sub minha_funcao {
   die “argumentos insuficientes”
      unless @_ > 2;
}

minha_funcao();


argumentos insuficientes at prog.pl line 2.



                                     Perl Moderno
1 sub minha_funcao {
2    die “argumentos insuficientes”
3       unless @_ > 2;
4 }
5
6 minha_funcao();


  argumentos insuficientes at prog.pl line 2.



                                       Perl Moderno
1   use Carp;
2
3   sub minha_funcao {
4      croak “argumentos insuficientes”
5         unless @_ > 2;
6   }
7
8   minha_funcao();


    argumentos insuficientes at prog.pl line 4
      main::minha_funcao() called at prog.pl line 8


                                         Perl Moderno
use croak() para gerar exceções
   do ponto de vista de quem
 chamou, ou confess() para um
      stack-trace completo

                         Perl Moderno
Carp::Always



               Perl Moderno
sub minha_funcao {
    my (@lista1, @lista2) = @_;
}


minha_funcao( @letras, @nums );



                             Perl Moderno
sub minha_funcao {
    my (@lista1, @lista2) = @_;
}


minha_funcao( @letras, @nums );



                             Perl Moderno
sub minha_funcao {
    my ($lista1, $lista2) = @_;
}


minha_funcao( @letras, @nums );



                              Perl Moderno
Referências &
funções anônimas


              Perl Moderno
sub minha_funcao {
    …
}




                     Perl Moderno
sub minha_funcao {
    …
}


my $sub_ref = &minha_funcao();



                        Perl Moderno
sub minha_funcao {
    …
}


my $sub_ref = &minha_funcao();
$sub_ref->( 10_000 )

                        Perl Moderno
my $sub_ref = sub {
    …
}


$sub_ref->( 10_000 )



                       Perl Moderno
Closures
e variáveis de estado



                  Perl Moderno
sub contador {
   my $i = shift;
   return sub {
       return $i++;
   };
}

my $contador = contador(13);

say $contador->();    # 13
say $contador->();    # 14

                             Perl Moderno
sub contador {
   state $i = shift;
   return $i++;
}



say contador(13);      # 13
say contador(13);      # 14



                              Perl Moderno
Argumentos recebidos
   pelo programa


                Perl Moderno
@ARGV

        Perl Moderno
my $arquivo = $ARGV[0]
    or exibe_ajuda() and exit;




                         Perl Moderno
Getopt::Long



               Perl Moderno
use Getopt::Long;

my %opcoes = ();

GetOptions( %opcoes,
    'l|length=i',
    'v|verbose',
);

say 'bla' if $opcoes{v};

                           Perl Moderno
use Getopt::Long;

my $opcoes = {};

GetOptions( $opcoes,
    'l|length=i',
    'v|verbose',
);

say 'bla' if $opcoes->{v};

                             Perl Moderno
CPAN

       Perl Moderno
CPAN =

         Perl Moderno
I    CPAN




    90% do seu programa
       já está pronto!

                    Perl Moderno
“cpan”




         Perl Moderno
“cpan”

         PAUSE




             Perl Moderno
“cpan”

         PAUSE

             mirrors




             Perl Moderno
“cpan”

         PAUSE

              mirrors


         busca online



               Perl Moderno
“cpan”

               PAUSE

                    mirrors


               busca online
CPAN Ratings

                     Perl Moderno
“cpan”

                   PAUSE

                        mirrors
CPAN RT
                   busca online
    CPAN Ratings

                         Perl Moderno
“cpan”

CPAN Testers        PAUSE

                         mirrors
CPAN RT
                    busca online
     CPAN Ratings

                          Perl Moderno
“cpan”

CPAN Testers        PAUSE

                         mirrors
CPAN RT
                    busca online
     CPAN Ratings

                          Perl Moderno
use o módulo local::lib para
instalar módulos como usuário
    (conta sem privilégios)


                         Perl Moderno
> curl -L http://cpanmin.us | perl – local::lib


                      (…)


> echo 'eval $(perl ­I$HOME/perl5/lib/perl5
        ­Mlocal::lib)' >>~/.bashrc




                                     Perl Moderno
Instalação de Módulos

         manual
          cpan
         cpanp
         cpanm
                        Perl Moderno
Upload de Módulos



    pause.cpan.org




                     Perl Moderno
Busca Online




      search.cpan.org
                        Perl Moderno
Busca Online




   search.metacpan.org
                    Perl Moderno
Busca Online




       grep.cpan.me
                      Perl Moderno
Avaliação & Feedback




   cpanratings.perl.org
                       Perl Moderno
Avaliação & Feedback




       annocpan.org
                       Perl Moderno
Bug & Request Tracking




        rt.cpan.org
                         Perl Moderno
Quality Assurance




      cpantesters.org
                        Perl Moderno
Escolhendo Bons Módulos

   . Boa documentação?
   . Testes relevantes ok?
   . Fila de Bugs/Requests ok?
   . Sólido ou abandonado?
   . Avaliação de terceiros?
   . Faz o que você precisa?

                               Perl Moderno
Escolhendo Bons Módulos




   Task::Kensho


                          Perl Moderno

More Related Content

What's hot

Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsGuilherme Blanco
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesOtávio Calaça Xavier
 
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 PHPOtávio Calaça Xavier
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHPzehzinho
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesCarlos Santos
 
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)Hugo Maia Vieira
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPGuilherme Blanco
 
Introdução ao Ruby
Introdução ao RubyIntrodução ao Ruby
Introdução ao RubyMilton Moura
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell ScriptHugo Maia Vieira
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7iMasters
 
Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell ScriptLuís Eduardo
 
Expressões Regulares e Python
Expressões Regulares e PythonExpressões Regulares e Python
Expressões Regulares e PythonMarcel Caraciolo
 

What's hot (20)

Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
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
 
Shell script
Shell scriptShell script
Shell script
 
Python Class
Python ClassPython Class
Python Class
 
JasperReports
JasperReportsJasperReports
JasperReports
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHP
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - Funções
 
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)
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHP
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Introdução ao Ruby
Introdução ao RubyIntrodução ao Ruby
Introdução ao Ruby
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell Script
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell Script
 
Expressões Regulares e Python
Expressões Regulares e PythonExpressões Regulares e Python
Expressões Regulares e Python
 

Similar to Perl Moderno, dia3

Similar to Perl Moderno, dia3 (20)

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)
 
PHP 5.3 - Arrays
PHP 5.3 - ArraysPHP 5.3 - Arrays
PHP 5.3 - Arrays
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de Programação
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantes
 
Aula2
Aula2Aula2
Aula2
 
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
 
Curso de PHP - Arrays
Curso de PHP - ArraysCurso de PHP - Arrays
Curso de PHP - Arrays
 
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
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
 
Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07
 
Palestra de PDO
Palestra de PDOPalestra de PDO
Palestra de PDO
 
Revisao php
Revisao phpRevisao php
Revisao php
 
Php
PhpPhp
Php
 
apostila.pdf
apostila.pdfapostila.pdf
apostila.pdf
 
LabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - ArraysLabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - Arrays
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 

More from 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
 
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
 

More from garux (11)

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
 
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
 

Perl Moderno, dia3