Desenvolvimento Rápido de Programas Linha de Comando

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Desenvolvimento Rápido de Programas Linha de Comando - Presentation Transcript

    1. Desenvolvimento Rápido de Programas Linha de Comando Breno G. de Oliveira breno@rio.pm.org
    2. Ferramentas Linha de Comando Tradicionais ● Exibição de ajuda (“help”) ● Parsing de argumentos Orientada a comandos ● Dispatcher ● Help específico ● Shell
    3. Dicotomia do Perl linguagem X ferramenta
    4. Perl como ferramenta? “Easy things, easy.” Com Perl, quase tudo é fácil ;-) Sysadmins e pesquisadores sabem disso (ou deveriam saber) ...e usam Perl diariamente como ferramenta para solucionar problemas de forma rápida e eficiente (ou deveriam usar)
    5. Problemas com One-liners (e pequenos programas) “escreva e descarte” (ou tenha pesadelos para manter) Repetição constante Baixa escalabilidade e flexibilidade *cof*cof* documentação? *cof*cof*
    6. Modelo Tradicional Getopt::Long + Pod::Usage Eficiente para programas lineares, mas não escala bem.
    7. Frameworks DRY (Don't Repeat Yourself) Flexibilidade Escalabilidade Documentação Testes
    8. Command Line Frameworks App::CLI App::Cmd CLI::Dispatch CLI::Framework
    9. App::Rad
    10. App::Rad Simples (e fácil) de instalar e usar Leve! Facilmente extensível Integração com one-liners
    11. Meu primeiro programa use App::Rad; App::Rad->run;
    12. Meu primeiro programa > ./meuprog.pl Usage: ./meuprog.pl  command [arguments] Available Commands:    help show syntax and available commands >
    13. Adicionando versão use App::Rad; App::Rad->run;
    14. Adicionando versão use App::Rad; App::Rad->run; our $VERSION = '0.1.1-pre-alfa';
    15. Executando novamente > ./meuprog.pl meuprog.pl version 0.1.1­pre­alfa Usage: ./meuprog.pl  command [arguments] Available Commands:    help show syntax and available commands > ./meuprog.pl ­­version meuprog.pl version 0.1.1­pre­alfa >
    16. Criando Comandos use App::Rad; App::Rad­>run; sub hello {    return “Hello, World!”; }
    17. Criando Comandos > ./meuprog.pl Usage: ./meuprog.pl  command [arguments] Available Commands:    hello    help show syntax and available commands > ./meuprog.pl hello Hello, World! >
    18. Criando Comandos Mais Interessantes use App::Rad; App::Rad­>run; sub roll :Help(roll a dice in AdX format) {    my $c = shift;    my $value = 0;    if ( $c­>argv­>[0] =~ m{(d+)d(d+)} ) {       for (1..$1) {          $value += int(rand($2) + 1);       }    }    return $value; }
    19. Criando Comandos Mais Interessantes > ./meuprog.pl Usage: ./meuprog.pl  command [arguments] Available Commands:    help   show syntax and available commands    roll   roll a dice in AdX format > ./meuprog.pl  roll  3d4 7 >
    20. Argumentos Simples @ARGV $c->options $c->argv $c->getopt
    21. Argumentos Explícitos sub setup {      my $c = shift;      $c­>register_commands({            cmd1  => { arg1 => {                             type      => 'num',                            condition => sub { $_ < 3 },                            required  => 1,                       },                       arg2 => {                            type      => 'str'                       },                     }            }     } }
    22. Fluxo do programa
    23. Funções de Controle setup() pre_process() post_process() teardown()
    24. Compartilhando dados (stash) sub command { my $c = shift; my $ret = do_something(); if ( $ret =~ /critical error/ ) { $c->stash->{mail} = 1; } return $ret; } sub post_process { my $c = shift; if ( $c->stash->{mail} ) { # send email alert... } else { print $c->output . "n"; } }
    25. “include” && “exclude” Comandos embutidos Manipulação de one-liners! Ambos “opt-in” use App::Rad qw(include exclude);
    26. “include” && “exclude” > perl ­e 'print “FISL!n”' FISL! > ./meuprog.pl include ­e 'print “FISL!n”' > ./meuprog.pl help Usage: ./meuprog.pl command [arguments] Available Commands:    cmd1    include    help    exclude
    27. “include” && “exclude” > ./meuprog.pl cmd1 FISL! (enquanto isso, em meuprog.pl...) sub cmd1 {    my $c = shift;    print “FISL!n”; }
    28. Exemplos mais convincentes Pegamos um one-liner “místico”... > perl ­i ­paF, ­le 'splice @F,1,0,$.; $_=join “,”,@F'  planilha.csv Fazemos uma substituição simples... > ./meuprog.pl include adiciona_coluna ­i ­paF, ­le 'splice @F,1,0,$.; $_=join “,”,@F' e voilá! > ./meuprog.pl  adiciona_coluna  planilha.csv
    29. (algumas) funções auxiliares commands() is_command( NOME ) register( NOME, CODEREF ) unregister( NOME ) load_config( ARQUIVO)
    30. Modo “shell” (REPL) use App::Rad; App::Rad->run;
    31. Modo “shell” (REPL) use App::Rad; App::Rad->shell;
    32. Modo “shell” (REPL) > ./meuprog.pl meuprog> help Available Commands:    help   show syntax and available commands    quit   exits the program    roll   roll a dice in AdX format meuprog> roll 2d10 9 meuprog> quit >
    33. Plugins! Prontos: ● TT ● ConfigLoader Em andamento: ● Log4perl ● Daemon ● ...?
    34. Extensões! MooseX::App::Rad (em andamento)
    35. Módulos interessantes de usar Sysadm::Install PUNC (Perl Unified Network Controller) Net::Server IPC::Cmd IO::Prompt Term::Menu
    36. Onde encontrar Código estável+documentação: CPAN Bleeding-edge: http://github.com/garu/App-Rad/ Discussão: #app-rad em irc.perl.org
    37. Compartilhe sua idéia! Estaremos no stand de Perl durante todo o evento!
    38. Obrigado! Dúvidas? breno@rio.pm.org

    + garuxgarux, 4 months ago

    custom

    161 views, 0 favs, 1 embeds more stats

    Conheça App::Rad, um moderno framework para o dese more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 161
      • 160 on SlideShare
      • 1 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 2
    Most viewed embeds
    • 1 views on http://www.slideshare.net

    more

    All embeds
    • 1 views on http://www.slideshare.net

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories