Your SlideShare is downloading. ×
PerlModerno.Breno G. de Oliveira   garu@cpan.orgBruno C. Buss          bbuss@cpan.org                                     ...
Dia #3         Perl Moderno
Revisão  . Operadores quote-like  . Executando programas externos  . Arrays e funções para listas  . Contextos  . Hashes e...
Referências              Perl Moderno
crie referências colocandouma 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 )                                      Per...
my @lista = ( 1, 7, @outra_lista, 5 );     ( apenas 1 elemento em @lista! )                                        Perl Mo...
my %stones = (   voz       =>   Jagger,   guitarra =>    Richards,   baixo     =>   Wyman,   bateria =>     Watts,);my $ba...
você pode pular o  “passo intermediário” e criarreferências anônimas, usando []  para arrays e {} para hashes             ...
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 $ba...
my $banda_ref   ={   voz        => Jagger,   guitarra   => Richards,   baixo      => Wyman,   bateria    => Watts,};      ...
desfaça referências colocando-aentre chaves onde você normalmente    escreveria o nome da variável                        ...
@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 M...
my @numeros = ( um, dois, três );my $num_ref = @numeros;my @outro = @{ $num_ref };my $valor = ${ $num_ref }[2];           ...
na hora de desfazer referências, as chaves são opcionais. Use    quando for mais legível                          Perl Mod...
@{ $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};}           ...
my $extenso = {    um => 1,    dois => 2,};foreach my $chave ( keys %$extenso ) {    say $extenso->{$chave};}             ...
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 =...
my $complicado = [   {      um => [ 1,              2,              [ 3,                 bla,                 { resposta =...
inspecione estruturas complexascom módulos como Data::Dumper,     Data::Dump::Streamer ou           Data::Printer         ...
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...
sub minha_funcao {   die “argumentos insuficientes”      unless @_ > 2;}minha_funcao();argumentos insuficientes at prog.pl...
1 sub minha_funcao {2    die “argumentos insuficientes”3       unless @_ > 2;4 }56 minha_funcao();  argumentos insuficient...
1   use Carp;23   sub minha_funcao {4      croak “argumentos insuficientes”5         unless @_ > 2;6   }78   minha_funcao(...
use croak() para gerar exceções   do ponto de vista de quem chamou, ou confess() para um      stack-trace completo        ...
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
Closurese variáveis de estado                  Perl Moderno
sub contador {   my $i = shift;   return sub {       return $i++;   };}my $contador = contador(13);say $contador->();    #...
sub contador {   state $i = shift;   return $i++;}say contador(13);      # 13say contador(13);      # 14                  ...
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};                ...
use Getopt::Long;my $opcoes = {};GetOptions( $opcoes,    l|length=i,    v|verbose,);say bla if $opcoes->{v};              ...
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 onlineCPAN Ratings                     Perl Mode...
“cpan”                   PAUSE                        mirrorsCPAN RT                   busca online    CPAN Ratings       ...
“cpan”CPAN Testers        PAUSE                         mirrorsCPAN RT                    busca online     CPAN Ratings   ...
“cpan”CPAN Testers        PAUSE                         mirrorsCPAN RT                    busca online     CPAN Ratings   ...
use o módulo local::lib parainstalar 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        ...
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 abando...
Escolhendo Bons Módulos   Task::Kensho                          Perl Moderno
Upcoming SlideShare
Loading in...5
×

Perl Moderno, dia3

1,231

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

Transcript of "Perl Moderno, dia3"

  1. 1. PerlModerno.Breno G. de Oliveira garu@cpan.orgBruno C. Buss bbuss@cpan.org Perl Moderno
  2. 2. Dia #3 Perl Moderno
  3. 3. Revisão . Operadores quote-like . Executando programas externos . Arrays e funções para listas . Contextos . Hashes e funções para hashes Perl Moderno
  4. 4. Referências Perl Moderno
  5. 5. crie referências colocandouma barra invertida “” na frente da variável Perl Moderno
  6. 6. my @numeros = ( um, dois, três );my $num_ref = @numeros; Perl Moderno
  7. 7. my @lista = ( 1, 7, @outra_lista, 5 ); ( cópia dos elementos de @outra_lista ) Perl Moderno
  8. 8. my @lista = ( 1, 7, @outra_lista, 5 ); ( apenas 1 elemento em @lista! ) Perl Moderno
  9. 9. my %stones = ( voz => Jagger, guitarra => Richards, baixo => Wyman, bateria => Watts,);my $banda_ref = %stones; Perl Moderno
  10. 10. você pode pular o “passo intermediário” e criarreferências anônimas, usando [] para arrays e {} para hashes Perl Moderno
  11. 11. my @numeros = ( um, dois, três );my $num_ref = @numeros; Perl Moderno
  12. 12. my $num_ref = [ um, dois, três ]; Perl Moderno
  13. 13. my %stones = ( voz => Jagger, guitarra => Richards, baixo => Wyman, bateria => Watts,);my $banda_ref = %stones; Perl Moderno
  14. 14. my $banda_ref ={ voz => Jagger, guitarra => Richards, baixo => Wyman, bateria => Watts,}; Perl Moderno
  15. 15. desfaça referências colocando-aentre chaves onde você normalmente escreveria o nome da variável Perl Moderno
  16. 16. @numeros Perl Moderno
  17. 17. @{ } Perl Moderno
  18. 18. @{ $ref } Perl Moderno
  19. 19. $numeros[1] Perl Moderno
  20. 20. ${ }[1] Perl Moderno
  21. 21. ${ $ref }[1] Perl Moderno
  22. 22. my @numeros = ( um, dois, três );my $num_ref = @numeros;my @outro = @{ $num_ref }; Perl Moderno
  23. 23. my @numeros = ( um, dois, três );my $num_ref = @numeros;my @outro = @{ $num_ref };my $valor = ${ $num_ref }[2]; Perl Moderno
  24. 24. na hora de desfazer referências, as chaves são opcionais. Use quando for mais legível Perl Moderno
  25. 25. @{ $ref } Perl Moderno
  26. 26. @$ref Perl Moderno
  27. 27. @$ref √ Perl Moderno
  28. 28. ${ $ref }[1] Perl Moderno
  29. 29. $$ref [1] Perl Moderno
  30. 30. ?$$ref [1] [2] Perl Moderno
  31. 31. ?${ $ref [1] }[2] Perl Moderno
  32. 32. ${ $ref }[1] [2] Perl Moderno
  33. 33. $$ref [1] [2] Perl Moderno
  34. 34. utilize $ref->em vez de ${ $ref } ou $$ref para acessar elementos Perl Moderno
  35. 35. ${ $ref }[1] Perl Moderno
  36. 36. $ref->[1] Perl Moderno
  37. 37. my $extenso = { um => 1, dois => 2,};say $extenso->{dois}; Perl Moderno
  38. 38. my $extenso = { um => 1, dois => 2,};foreach my $chave ( keys %{$extenso} ) { say $extenso->{$chave};} Perl Moderno
  39. 39. my $extenso = { um => 1, dois => 2,};foreach my $chave ( keys %$extenso ) { say $extenso->{$chave};} Perl Moderno
  40. 40. my $var = { um => 1, dois => 2,};say ref $var;HASH Perl Moderno
  41. 41. my $var = [ 1, 2 ];say ref $var;ARRAY Perl Moderno
  42. 42. Estruturas Complexas Perl Moderno
  43. 43. my @matriz = ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ],);say $matriz[1]->[2]; Perl Moderno
  44. 44. my @matriz = ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ],);say $matriz[1]->[2];6 Perl Moderno
  45. 45. my @matriz = ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ],);say $matriz[1][2];6 Perl Moderno
  46. 46. entre chaves/colchetes, a “seta” é opcional Perl Moderno
  47. 47. my @matriz = ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ],);say $matriz[1][2];6 Perl Moderno
  48. 48. my $matriz = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ],];say $matriz->[1][2];6 Perl Moderno
  49. 49. my $complicado = [ { um => [ 1, 2, [ 3, bla, { resposta => 42 }, ], { 4 => 5, 6 => [ 7, 8, 9 ], }, ], }, 5,]; Perl Moderno
  50. 50. 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
  51. 51. inspecione estruturas complexascom módulos como Data::Dumper, Data::Dump::Streamer ou Data::Printer Perl Moderno
  52. 52. Funções Perl Moderno
  53. 53. sub minha_funcao { …} Perl Moderno
  54. 54. sub minha_funcao { …}minha_funcao(); Perl Moderno
  55. 55. sub minha_funcao { return 42;}my $valor = minha_funcao(); Perl Moderno
  56. 56. sub minha_funcao { return (1, 2, 3);}my @valores = minha_funcao(); Perl Moderno
  57. 57. Passando parâmetros Perl Moderno
  58. 58. minha_funcao( foo ); Perl Moderno
  59. 59. minha_funcao( 1, 2, 3 ); Perl Moderno
  60. 60. @_ Perl Moderno
  61. 61. sub minha_funcao { my @parametros = @_;}minha_funcao(42); Perl Moderno
  62. 62. sub minha_funcao { my ($valor1, $valor2) = @_;}minha_funcao(42); Perl Moderno
  63. 63. sub minha_funcao { my $valor = $_[0];}minha_funcao(42); Perl Moderno
  64. 64. sub minha_funcao { my $valor = shift @_;}minha_funcao(42); Perl Moderno
  65. 65. sub minha_funcao { my $valor = shift;}minha_funcao(42); Perl Moderno
  66. 66. sub minha_funcao { die “argumentos insuficientes” unless @_ > 2;}minha_funcao(); Perl Moderno
  67. 67. sub minha_funcao { die “argumentos insuficientes” unless @_ > 2;}minha_funcao();argumentos insuficientes at prog.pl line 2. Perl Moderno
  68. 68. 1 sub minha_funcao {2 die “argumentos insuficientes”3 unless @_ > 2;4 }56 minha_funcao(); argumentos insuficientes at prog.pl line 2. Perl Moderno
  69. 69. 1 use Carp;23 sub minha_funcao {4 croak “argumentos insuficientes”5 unless @_ > 2;6 }78 minha_funcao(); argumentos insuficientes at prog.pl line 4 main::minha_funcao() called at prog.pl line 8 Perl Moderno
  70. 70. use croak() para gerar exceções do ponto de vista de quem chamou, ou confess() para um stack-trace completo Perl Moderno
  71. 71. Carp::Always Perl Moderno
  72. 72. sub minha_funcao { my (@lista1, @lista2) = @_;}minha_funcao( @letras, @nums ); Perl Moderno
  73. 73. sub minha_funcao { my (@lista1, @lista2) = @_;}minha_funcao( @letras, @nums ); Perl Moderno
  74. 74. sub minha_funcao { my ($lista1, $lista2) = @_;}minha_funcao( @letras, @nums ); Perl Moderno
  75. 75. Referências &funções anônimas Perl Moderno
  76. 76. sub minha_funcao { …} Perl Moderno
  77. 77. sub minha_funcao { …}my $sub_ref = &minha_funcao(); Perl Moderno
  78. 78. sub minha_funcao { …}my $sub_ref = &minha_funcao();$sub_ref->( 10_000 ) Perl Moderno
  79. 79. my $sub_ref = sub { …}$sub_ref->( 10_000 ) Perl Moderno
  80. 80. Closurese variáveis de estado Perl Moderno
  81. 81. sub contador { my $i = shift; return sub { return $i++; };}my $contador = contador(13);say $contador->(); # 13say $contador->(); # 14 Perl Moderno
  82. 82. sub contador { state $i = shift; return $i++;}say contador(13); # 13say contador(13); # 14 Perl Moderno
  83. 83. Argumentos recebidos pelo programa Perl Moderno
  84. 84. @ARGV Perl Moderno
  85. 85. my $arquivo = $ARGV[0] or exibe_ajuda() and exit; Perl Moderno
  86. 86. Getopt::Long Perl Moderno
  87. 87. use Getopt::Long;my %opcoes = ();GetOptions( %opcoes,    l|length=i,    v|verbose,);say bla if $opcoes{v}; Perl Moderno
  88. 88. use Getopt::Long;my $opcoes = {};GetOptions( $opcoes,    l|length=i,    v|verbose,);say bla if $opcoes->{v}; Perl Moderno
  89. 89. CPAN Perl Moderno
  90. 90. CPAN = Perl Moderno
  91. 91. I CPAN 90% do seu programa já está pronto! Perl Moderno
  92. 92. “cpan” Perl Moderno
  93. 93. “cpan” PAUSE Perl Moderno
  94. 94. “cpan” PAUSE mirrors Perl Moderno
  95. 95. “cpan” PAUSE mirrors busca online Perl Moderno
  96. 96. “cpan” PAUSE mirrors busca onlineCPAN Ratings Perl Moderno
  97. 97. “cpan” PAUSE mirrorsCPAN RT busca online CPAN Ratings Perl Moderno
  98. 98. “cpan”CPAN Testers PAUSE mirrorsCPAN RT busca online CPAN Ratings Perl Moderno
  99. 99. “cpan”CPAN Testers PAUSE mirrorsCPAN RT busca online CPAN Ratings Perl Moderno
  100. 100. use o módulo local::lib parainstalar módulos como usuário (conta sem privilégios) Perl Moderno
  101. 101. > curl -L http://cpanmin.us | perl – local::lib (…)> echo eval $(perl ­I$HOME/perl5/lib/perl5        ­Mlocal::lib) >>~/.bashrc Perl Moderno
  102. 102. Instalação de Módulos manual cpan cpanp cpanm Perl Moderno
  103. 103. Upload de Módulos pause.cpan.org Perl Moderno
  104. 104. Busca Online search.cpan.org Perl Moderno
  105. 105. Busca Online search.metacpan.org Perl Moderno
  106. 106. Busca Online grep.cpan.me Perl Moderno
  107. 107. Avaliação & Feedback cpanratings.perl.org Perl Moderno
  108. 108. Avaliação & Feedback annocpan.org Perl Moderno
  109. 109. Bug & Request Tracking rt.cpan.org Perl Moderno
  110. 110. Quality Assurance cpantesters.org Perl Moderno
  111. 111. 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
  112. 112. Escolhendo Bons Módulos Task::Kensho Perl Moderno

×