Skip to content

Instantly share code, notes, and snippets.

@thiagorondon
Created September 28, 2011 20:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save thiagorondon/1249090 to your computer and use it in GitHub Desktop.
Save thiagorondon/1249090 to your computer and use it in GitHub Desktop.
São Paulo Perl Mongers FAQ

São Paulo Perl Mongers FAQ

Este FAQ contém dúvidas frequentes que são questionadas na lista de discussão da São Paulo Perl Mongers. Caso tenha alguma pergunta nova, entre em contato com o mantenedor deste FAQ.

Regras:

  • Apenas uma resposta por autor para cada pergunta.
  • O autor deve ter um ID no CPAN.
  • Este documento esta sobre Creative Commons.

Segue a lista dos contribuidores deste FAQ, eles estão listados por ordem alfabetica, e é utilizado a abreveação que esta logo a frente do nome para identificar quem respondeu as perguntas.

Sumário

Questões gerais

  • O que é Perl ?

(TBR) (01/10/2011) - (Baseado no perlfaq) - Perl é uma linguagem de programação de alto nível com uma herança eclética, escrita por Larry Wall e muitos outros. Ela deriva da linguagem de programação C e, em menor medida, de sed, awk, shell e pelo menos uma dúzia de ferramentas e outras linguagens. Perl facilita a manipulação de processos, arquivos e textos, no que torna particularmente adequado para tarefas que envolvam a prototipagem rápida, utilitários do sistema, ferramentas de software, tarefas de gerenciamento do sistema, acesso ao banco de dados, programação gráfica, redes e programação web. Estes pontos fortes tornam especialmente popular entre os administradores de sistema, autores de script, desenvolvedores web, mas os matemáticos, jornalistas, e até mesmo gerentes também usam Perl. Talvez você deva também.

  • É difícil aprender Perl ?

(TBR) (01/10/2011) - (Baseado no perlfaq) Não, Perl é fácil de começar a aprender e fácil de manter o aprendizado, se você já escreveu em C, awk, shell script ou mesmo um programa BASIC, você praticamente já começou a aprender. A maioria das tarefas requerem apenas um pequeno subconjunto da linguagem Perl para serem realizadas. Um dos lemas para desenvolvimento Perl é "há mais de uma maneira de se fazer isto" (TMTOWTDI, pronunciado algumas vezes como "tim toady"). Portando a curva de aprendizado é pequena (fácil de aprender) e longo (pois há muita coisa que você possa fazer, caso você realmente queira).

  • Como comparar Perl com outras linguagens, como Java, Python, Scheme ou TCL ?

(TBR) (01/10/2011) - (Baseado no perlfaq) É melhor em algumas áreas, e pior em outras. Precisamente quais áreas são boas ou ruins geralmente é uma escolha pessoal, e esta é o tipo de questão que pode gerar discussões sem conclusões em muitos casos. Provavelmente a melhor coisa a se fazer, é experimentar escrever código nas diversas linguagens e tirar suas próprias conclusões. Mas, caso você realmente queira uma resposta, visite este link http://www.perl.com/doc/FMTEYEWTK/versus/, no qual você pode encontrar algumas comparações entre elas.

  • Como contribuir com o FAQ ?

(TBR) (30/09/2011) - Você pode enviar um e-mail com sugestões, adições ou correções para a lista da São Paulo Perl Mongers (http://sao-paulo.pm.org/), utilizamos a lista do grupo para centralizar o esforço para construção deste FAQ.

Obtendo, Socializando e Aprendendo Perl.

  • Qual a última versão do Perl estável ?

(TBR) (28/09/2011) - Para saber a última versão disponível da linguagem Perl, acesse o site http://www.perl.org/.

  • Qual tipo de plataforma/máquinas são suportas pelo Perl ? Onde eu posso conseguir ?

(TBR) (01/10/2011) - A distribuição do Perl é feita apenas via código fonte (pelo time de desenvolvimento da linguagem) e você pode obter informações das últimas versões neste link - http://www.cpan.org/src/README.html. Perl suporta muitas plataformas, é dito que todas as derivações de UNIX são suportas e outros sistemas como VMS, DOS, OS/2, Windows, QNX, BeOS, OS X, MPE/iX e Amiga.

  • Onde eu posso buscar por versões binárias do Perl ?

(TBR) (01/10/2011) (Tradução perlfaq):

  • ActiveState: Windows, Linux, Mac OS X, Solaris, AIX and HP‐UX

             http://www.activestate.com/
    
  • Sunfreeware.com: Solaris 2.5 to Solaris 10 (SPARC and x86)

             http://www.sunfreeware.com/
    
  • Strawberry Perl: Windows, Perl 5.8.8 and 5.10.0

             http://www.strawberryperl.com
    
  • IndigoPerl: Windows

             http://indigostar.com/
    
  • O que são Perl Mongers ?

(TBR) (28/09/2011) - São grupos de usuários Perl localizados em determinados locais e que utilizam uma lista de discussão, IRC, realizam encontros sóciais e técnicos para debater sobre perl e tudo o que for interessante. Há uma listagem de grupos disponiveis no Brasil em http://www.pm.org/groups/brazil.html, porém os mais ativos atualmente é a São Paulo-PM (http://sao-paulo.pm.org) e a Rio-PM (http://rio.pm.org). Veja mais grupos no mundo em http://www.pm.org/.

  • Onde encontrar entusiastas de Perl ?

(TBR) (28/09/2011) - Um bom local são as listas de discussão, canais de IRC na rede irc.perl.org e encontros sociais e técnicos realizados pelos mongers.

  • Como eu encontro documentação sobre uma determinada função, ou manual do Perl ?

(TBR) (04/10/2011) - Há um aplicativo "perldoc" que acompanha a distribuição oficial do Perl, que pode ser invocada pela linha de comando para visualizar manuais, informações sobre uma determinada função e sobre algum módulo caso há documentação disponível, que normalmente é a maioria dos casos. Para mais inforamações, digite:

     perldoc perldoc
  • Qual a melhor maneira para se instalar um módulo ?

(TBR) (28/09/2011) - O aplicativo mais simples para instalar módulos é o cpanminus (http://search.cpan.org/dist/App-cpanminus/). Porém, ele não vem por padrão na distribuição do Perl e por isto é necessário a instalação, em ambientes unix com acesso a Internet a linha de comando "curl -L http://cpanmin.us | perl - App::cpanminus" basta para instalar o aplicativo. Depois de instalado, basta digitar "cpanm" seguido do módulo que quer instalar, por exemplo: "cpanm Moose".

  • O que é Perl Moderno ?

(MAR) (30/09/2011) - Para esta pergunta há um livro (https://github.com/chromatic/modern_perl_book/), e ainda dentro deste assunto, o chromatic fez um post bacana, quem esta começando a programar Perl ou quer melhorar, recomendo http://www.modernperlbooks.com/mt/2011/09/how-to-learn-perl.html

Soluções disponíveis em Perl

  • Monitoramento

(TBR) (28/09/2011) - Nagios provavelmente é a aplicação de monitoramento mais popular, no qual oferece vários recursos, tais como monitoração de rede ou recursos (opcionalmente com uso de hirarquia de recursos) e fácil desenvolvimento de plugins. Além de monitorar, há como definir controles sobre como isto será feito em relação ao volume de requisições há um determinado objetivo, assim como definir maneiras pró-ativas de tratar determinado evento em casos pré-determinados, e tudo isto com uma interface web ou em arquivos de logs para visualizar tudo o que acontece.

  • ORM e módulos para acesso a banco de dados.

(DAN) (28/10/2011) - São importantes porque eles fazem parte das boas práticas de Engenharia de Software (Livro Semantic Web, página 11), O DBIx::Class simplesmente mapeia o seu banco de dados relacional em classes usando objetos intermediários. (http://search.cpan.org/~abraxxa/DBIx-Class-0.08195/lib/DBIx/Class/Manual/Intro.pod)

  • Frameworks web.

(TBR) (28/09/2011) - Existem muitos frameworks web disponíveis no mundo Perl. Porém, na minha opinião é recomendado a utilização do Catalyst, por ser um framework maduro, com uma comunidade solida e com um universo de módulos ao redor muito bem organizado.

Questões sobre a linguagem Perl

  • Como eu crio uma classe ?

(TBR) (01/10/2011) - (baseado na tradução do perlfaq) Em Perl, classes são apenas pacotes e métodos são apenas funções. Perl não tem nada formal além disto para este caso, não há nenhuma "configuração" pre-estabelecida para um pacote, você pode fazer o que bem entender com ele. A documentação do Perl tem vários documentos que cobrem este assunto, tais como perlboot (Tutorial Barnyard Object Oriented), perltoot (Tom Tutorial objeto Oriented), perlbot (Truques Bag o 'Object), e perlobj.

  • Qual a diferença de invocar uma função como &foo ou foo() ?

(TBR) (01/10/2011) - (baseado na tradução do perlfaq) Invocar uma função como "&foo" sem parenteses, ignora o prototipo de "foo" e repassar o valor atual da lista de argumentos, @_. Veja um exemplo, onde a função "bar" chama por "&foo", e irá permamecer com os valores repassados para bar.

           sub bar { &foo }

           sub foo { print "Args in foo are: @_\n" }

           bar( qw( a b c ) );

Quando você invocar "bar" com argumentos, você irá ver que os argumentos repassados para "foo", serão os mesmos presentes em @_.

            Os argumentos em foo são: a b c

Chamando a função com parenteses, com ou sem argumentos, não irá fazer com que o atual @_ seja utilizado. Alterando o exemplo, e adicionando parenteses para invocar "foo", veja qual será o resultado:

           sub bar { &foo() }

           sub foo { print "Args in foo are: @_\n" }

           bar( qw( a b c ) );

Agora a saída de "foo", não terá o @_ de quem o invocou.

            Os argumentos em foo são:

A principal função de usar a característica do @_, é para escrever funções que serão invocadas pelo objetivo principal. Para mais detalhes veja a documentação "perlsub".

Manipulação de dados

  • Como reconhecer e processar estruturas textuais relativamente complexas? Ex: fórmulas matemáticas como: z^2 = ((1^(sqrt(zx))/(x^(x*y)))/e-(xy-235)^(1/2))/(8-(x^(y-1)))

(GAB) (30/09/2011) - Você pode se arriscar construir uma expressão regular imensa, que muito provavelmente só funcionará para um subconjunto limitado da estrutura do texto de entrada, ou pode usar o módulo Regexp::Grammars (https://metacpan.org/module/Regexp::Grammars).

Com ele é possível processar estruturas textuais complexas, hierárquicas e até recursivas. O Regexp::Grammars se aproveita de algumas novas funcionalidades introduzidas no Perl 5.10 para adicionar algumas extensões nas expressões regulares permitindo definir a estrutura dos dados de entrada usando construções em forma de gramáticas (http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm).

No fim da operação você tem disponível na variável %/ seus dados hierarquicamente representados numa estrutura em árvore de hashes aninhados.

Vale a pena dar uma olhada nos exemplos da documentação e na pasta demo/ presente no diretório raiz do módulo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment