Rio de Janeiro
Perl Mongers

Rio de Janeiro Perl Mongers

A Rio-PM agradece a:

pelo patrocínio ao Perl

Mitos e FUD sobre Perl




FUD (do inglês "fear, uncertainty and doubt" - medo, incerteza e dúvida): estratégia política e de marketing para influenciar a percepção do público através da disseminação de informações negativas e vagas.

Há muita desinformação espalhada na Web sobre Perl. Antes de se deixar levar pelo preconceito, conheça mais sobre os fatos.



Mito: Perl está morto/morrendo
Provável origem: Linguagens interpretadas de uso geral como Python e Ruby estão em voga, projetos em PHP populam a Web e desenvolvimento em Java é constantemente empurrado/reforçado em ambientes corporativos.
Realidade: Toda linguagem tem seu nicho, suas vantagens e desvantagens, e é ótimo que novas linguagens surjam por aí (para quem não sabe, PHP e Ruby são derivadas diretamente do Perl). Mas daí a achar que o Perl está morto é um grande salto surreal. Pelo contrário, o desenvolvimento Perl nunca esteve tão ativo. A quantidade de módulos para Perl no CPAN subiu de 5 mil no ano 2000 para 11000 em 2007, e basta olhar para a caixa ao lado para ver a quantidade existente hoje. Infelizmente para sua própria publicidade, o Perl é uma linguagem que tipicamente fica nos bastidores, atrás dos holofotes, cuidando de todo o espetáculo sem receber os devidos créditos. Mas está tão longe de estar morrendo que tem uma das comunidades de desenvolvedores mais ativa do mundo, lançou uma versão fresquinha e cheia de novidades (5.10) agora mesmo em dezembro de 2007 e é abertamente utilizada em diversos projetos pelas principais empresas de diversos setores.

voltar ao início



Mito:Perl não é orientado a objetos
Provável origem: Pessoas que conheceram/ouviram falar de versões antigas do Perl, anteriores a 1994 (!)
Realidade: Perl não foi originalmente projetado - ou implementado - como uma linguagem orientada a objetos. Mas Perl é uma linguagem multiparadigma e com ela você pode desenvolver código procedural, orientado a objetos, funcional, declarativo ou até mesmo orientado a eventos, de acordo com sua experiência e necessidade de projeto. Orientação a Objetos é um padrão de design de aplicações conhecido desde pelo menos os anos 60 com linguagens como Simula 67 e Smalltalk, mas só recentemente recebeu a atenção e fama dos desenvolvedores do mundo. O suporte a OO em Perl é simples, estável, poderoso e muito bem integrado à linguagem, mas não é em absoluto fundamental à mesma (como é o caso de Java, Ruby ou Python).

voltar ao início



Mito: Perl só serve para pequenos programas, não escala bem para grandes projetos ou "programas de verdade"
Provável origem: "One-liners" e pequenos programas que resolvem problemas de parsing/interpretação de informação são divulgados pela comunidade e largamente utilizados por administradores de sistemas em todo o mundo.
Realidade: Com Perl é possível fazer programas completos e resolver problemas em poucas linhas, mas o fato de se conseguir fazer muito com apenas poucas linhas de código Perl não quer dizer que não seja possível fazer grandes projetos em Perl - pelo contrário! Além de ser uma linguagem extremamente poderosa, Perl possui todos os recursos para se desenvolver projetos de médio e grande porte através de compartimentação, orientação a objetos, bibliotecas, threading, namespaces, além de suítes completas de testes e distribuição. Perl possui também o CPAN, um vasto repositório de módulos testados, homologados e avaliados em diferentes plataformas por toda a comunidade, possibilitando agilidade, liberdade, poder e robustez no desenvolvimento de seus aplicativos. Um dos lemas do CPAN é que 90% de todos os seus programas já está pronto, e isso se deve à força do repositório que conta com gemas como seus módulos de manipulação transparente de bancos de dados (MySQL, MS-SQL, PostgreSQL, Oracle, entre outros), Internet e Web 2.0 (HTML, JavaScript, SOAP, protocolos de diferentes camadas, frameworks completos de desenvolvimento MVC, entre outros), geração e manipulação dinâmica de arquivos em diferentes formatos como PDF, YAML e XML, testes, limpeza e manutenção de código, além de uma excelente integração com outras linguagens (através de módulos Inline). O CPAN conta ainda com abrangente análise de dependências para cada módulo com testes integrados, possibilitando análise de risco e qualidade de cada módulo do repositório. Todo projeto de médio e grande porte, em qualquer linguagem, exige esforço, design cuidadoso e unidades de teste decentes. No entanto, muitos projetos começam pequenos, com novas características adicionadas incrementalmente até se tornarem uma grande bola de lama, e esses sim são projetos que não escalam bem para grandes programas, independente da linguagem utilizada.

voltar ao início



Mito: Código em Perl é feio/confuso/difícil de manter
Provável origem: Exemplos ruins retirados da Internet ou de listas/fóruns de discussão, sem background e contextualização adequados.
Realidade: Perl é uma linguagem com muitas palavras reservadas e sintaxe extremamente maleável. Há sempre mais de uma maneira de se fazer as coisas, e muitos pequenos atalhos (nem sempre bonitos, como variáveis especiais) que podem ser utilizados para se fazer mais e escrever menos. Toda essa flexibilidade da ferramenta dá liberdade ao programador para se divertir, criar e experimentar com a linguagem, expressando-se como quiser e programando do seu jeito, e com isso diversos aspectos únicos da cultura Perl foram se desenvolvendo. Dentre eles, JAPHs - pequenos e obscuros programas que, quando executados, exibem a frase "Just another Perl Hacker" - e competições de golfe - programas que resolvam um desafio qualquer com o menor número de caracteres no código -, foram talvez os principais responsáveis pela disseminação do mito. Ao ver um post com algum JAPH ou Golfe (ou qualquer código feito rapidamente e desleixadamente, como um rascunho para solucionar determinado problema), confuso e obscuro, o leitor indagava "o que é esse troço?" ao passo que o programador, orgulhoso de sua criação, respondia com orgulho: "isso é Perl", sem perceber que estava causando uma impressão ruim - e não positiva - da linguagem para um iletrado. Mas Perl não precisa ser obscuro e, pelo contrário, possui todos os recursos para que seu código seja não apenas limpo como extremamente fácil de manter. Há muita literatura a respeito de design patterns e boas práticas em Perl, e é sempre recomendado que seus programas "sérios" sejam feitos com esse tipo de cuidado. Muitas linguagens - essencialmente Python e talvez até mesmo Java - obrigam (ou tentam obrigar) o programador a desenvolver código sempre estruturado e organizado. Perl oferece diversos mecanismos para reforçar modelos e padrões de programação em seus projetos a toda sua equipe de desenvolvedores (Perl::Tidy, Perl::Critic, Test::* e Devel::Cover apenas para citar alguns), todos configuráveis, extensíveis, eficazes e... opcionais! É uma crença da comunidade Perl (e outras comunidades ao redor do mundo) que a verdadeira grandeza é medida por quanta liberdade você dá aos outros, não por quanto você pode coagir os outros a fazer o que você quer. Inclusive a liberdade de reforçar padrões, modelos e estruturas de programação a seus projetos =)

voltar ao início



Mito: Perl é difícil de ler/entender
Provável origem: Mesma que o mito acima; também associada ao uso de Expressões Regulares em programas.
Realidade: Expressões Regulares são fundamentais para o tratamento de informações - uma das especialidades do Perl - e por isso possuem um papel importante e especial na linguagem. De fato, hoje o Perl está na vanguarda absoluta de ERs, definindo o padrão de facto do mercado: sua estrutura (ou ao menos parte dela) é exportada para todas as principais linguagens de programação do mundo na forma de bibliotecas PCRE (Perl Compatible Regular Expressions), mas nenhuma possui a robustez, poder e velocidade da nativa em Perl. Só que expressões regulares são intrinsecamente confusas quando não documentadas, fáceis de escrever mas difíceis de ler (tem gente que brinca ao ver ERs complexas, dizendo que parece que um gato caminhou por cima do teclado). Mas isso é um problema de expressões regulares, não do Perl. E, novamente, em Perl há uma série de modelos para mitigar e até evitar completamente este problema, desde funções internas para o tratamento de strings (como substr, index e sprintf) até a possibilidade de formatação e comentários in line em suas expressões regulares, de modo a deixar o código claro e minimizar o efeito "magia negra".

voltar ao início



Mito: Perl é difícil de aprender/usar
Provável origem: Novamente, exemplos errados, dando a falsa sensação de que Perl é uma linguagem críptica e confusa.
Realidade: Pelo contrário, por ser multiparadigma, é fácil associar qualquer linguagem anterior que o profissional ou entusiasta saiba a seu equivalente em Perl. Programadores com passado em C estão em vantagem particular, mas isso se aplica a qualquer uma das linguagens populares de hoje. Por sua liberdade, o programador pode escolher o caminho de aprendizado que melhor se adeque a seu modo de pensar. Em Perl não há complicações para o iniciante como OO obrigatória ou formatação forçada, e a linguagem assume a magnífica postura DWIM (Do What I Mean), tão requisitada entre desenvolvedores, com funções polimórficas associadas aos tipos de dados passados e ao contexto da chamada. Sempre que em dúvida, experimente fazer como você acha que deveria funcionar e provavelmente vai :) E se você sabe inglês as coisas ficam mais fáceis ainda, pois as funções em Perl possuem nomes bastante intuitivos para seus objetivos, tornando o código ainda mais fácil de se ler. Quer imprimir algo na tela?
    print "alo, mundo!";
Quer escrever em um arquivo (digamos, "meu_arquivo.txt")?
    open ARQ, '<', 'meu_arquivo.txt'
      or die "erro abrindo arquivo!!!";

    print ARQ "alo, mundo!";

    close ARQ;
Quer exibir todos os números de 1 a100?
    foreach $num (1..100) {
        print $num;
    }
ou ainda:
    foreach (1..100) {
        print;
    }
ou simplesmente:
    print 1..100;
Quer fazer do jeito clássico, como em C?
    for ($i = 1; $i <= 100; $i++) {
        printf ("%d", $i);
    }
Também pode (mas você será acusado de programar com sotaque :-) Perl é uma linguagem extremamente fácil de ser aprendida, basta que você encontre os exemplos e professores certos. Experimente os livros em nossa área de leitura, participe, aprenda e tire suas dúvidas na lista da Rio Perl Mongers, veja os artigos e documentação traduzida no site da Brasil PM ou os originais em learn.perl.org e perldoc.perl.org!

voltar ao início



Mito: Perl é só para CGI (Web)
Provável origem: Integração clássica do Perl com a Web
Realidade: Perl é uma linguagem multi-propósito cujo principal apelo é a manipulação de informação (textos formatados ou não) de maneira fácil e rápida. A Web e suas linguagens (HTML, XML, etc) são compostas tipicamente de informação, e por isso Perl e a Web têm um casamento tão forte. No início da Web, por ser uma linguagem poderosa e fácil de usar, Perl foi logo adotado como a principal opção para criação de sites dinâmicos com CGI. Mas Perl é ideal para qualquer aplicação que manipule informação, seja ela acessível via Web ou não. De fato, administradores de sistemas utilizam Perl há décadas para tarefas das mais simples às mais críticas, e existe um número cada dia maior de programas para usuários finais desenvolvidos parcial ou inteiramente em Perl.

voltar ao início



Mito: Perl é lento
Provável origem: Preconceito com linguagens interpretadas, tipicamente mais lentas que programas pré-compilados.
Realidade: Poderíamos mostrar diversas comparações (benchmarking) mostrando o fantástico desempenho do Perl, mas a verdade é que não é possível medir uma linguagem de programação, e sim suas implementações - ou melhor, programas específicos compilados/interpretados por aquela implementação específica. Perl, no entanto, difere da maioria das linguagens interpretadas por possuir diversas técnicas de otimização. Para começar, antes de ser interpretado, o código Perl é compilado em uma árvore gramatical (parse tree) onde o compilador realiza uma série de otimizações de código, para só então interpretá-lo. Módulos utilizando XS, SWIG e Inline ajudam a gerar código C (ou mesmo Assembly) em partes do programa em que velocidade é realmente crítica, acessíveis (e de fato utilizadas!) de dentro de seu programa Perl. Para Web, módulos como FastCGI e mod_perl, entre tantos outros, ajudam o Perl a se destacar nesse nicho. Mesmo aplicações gráficas com OpenGL podem ser criadas em Perl com resultados espantadoramente rápidos, sem diferenças estatísticas na perfomance geral em relação à mesma implementação em C, e até mesmo superando C em determinadas operações! (impressionado? Veja a história completa aqui)

voltar ao início



Mito: Perl é inseguro
Provável origem: Errôneo correlacionamento entre o Perl e outras linguagens não tão poderosas ou mais difíceis de usar.
Realidade: Perl é uma linguagem de uso geral extremamente poderosa. Com ela, é fácil fazer programas que realizam diversas atividades em redes e sistemas isolados. Naturalmente - e consequentemente - é preciso responsabilidade e cuidado ao se desenvolver programas que façam acessos aos recursos de hardware, software e rede, mas isso é verdade para qualquer linguagem de uso geral. Ao contrário das outras, no entanto, Perl possui um dos maiores conjuntos de recursos de segurança para proteger seu ambiente de programas maliciosos (ou mal feitos), dentre eles: A cada dia inúmeras empresas e organizações utilizam programas em Perl em pontos críticos de seus negócios. Bancos (como Citigroup, Bank of America, e Deutsche Bank), Hospitais (como o de Lausanne, na Suíça) e empresas multimilhonárias (como Amazon, VeriSign e Tickermaster) depositam sua confiança em programas Perl. Você pode clicar aqui para uma lista mais completa, caso esses nomes não tenham sido o suficiente para te convencer.

voltar ao início



Mito: Perl não tem documentação ou suporte
Provável origem: Falta de material sólido de apoio em português
Realidade: Perl é uma das linguagens mais bem documentadas do mundo e sua enorme comunidade de desenvolvedores é extremamente aberta a tirar dúvidas e ajudar a apontar iniciantes para o caminho certo. A documentação oficial do Perl (mais de 70 mil linhas) está disponível na forma de guias, referências e tutoriais direto da linha de comando (através do comando "perldoc") ou online, através do site oficial. Sites como PerlMonks e canais de irc (como o #perl em irc.freenode.net) oferecem suporte a todos que tem dúvidas e questões relacionadas ao desenvolvimento de software em Perl. Há ainda o learn.perl.org, com várias fontes para uma boa experiência no aprendizado da linguagem, além de nossa seção de livros. Mas, por ser extremamente popular principalmente em países de língua inglesa, boa parte da documentação está apenas em inglês. Pensando nisso, a Sociedade Perl do Brasil vêm coordenando projeto de tradução da documentação oficial, bem como centralizando artigos em língua portuguesa sobre a mesma. Nossa lista de discussão não para de ganhar novos adeptos, e toda a comunidade nacional se oferece para ajudar aqueles que querem aprender mais sobre Perl.

voltar ao início



Mito: Perl não pode ser usado em programas comerciais
Provável origem: Não conhecimento das licenças, preconceito com software livre, fato do programa em si ser o próprio código fonte e sem binário stand-alone
Realidade: Perl não é um software, é uma linguagem. E, como linguagem, você pode fazer o que quiser com ela, e liberar seu software como bem entender, gratuito, pago, livre, comercial. A opção no final é sempre sua. Já "perl" - o interpretador - é um software estável, multiplataforma e de código aberto para executar programas escritos em Perl - a linguagem. Esse sim é liberado em uma licença chamada Artística, que essencialmente diz que você pode fazer o que quiser com o código fonte, desde que dê os devidos créditos ao software original. Perl também é liberado sob a GPL, então você ainda tem a liberdade de escolher a licença mais adequada a seus objetivos (mais detalhes aqui). Há versões alternativas do interpretador, como o ActivePerl (com sua própria licença), e a distribuição do intepretador é o único momento em que você poderia se preocupar com questões comerciais - e a licença artística está aí exatamente para te dar toda a liberdade para realizar aplicações comerciais stand-alone em Perl. Sobre o programa ser o próprio código fonte, sem compilação, há diversos módulos para ocultar e ofuscar seus programas em Perl - ainda que essa não seja a preferência da maioria - mas a verdade é que nada impede que um programa compilado (ou ofuscado) seja transformado de volta em código fonte legível. Para contornar a dependência do interpretador, módulos como o PAR são capazes de juntar perl, seu programa e todas as dependências do mesmo em um único arquivo binário executável, pronto para rodar em qualquer plataforma, mesmo sem o perl instalado!

voltar ao início



Mito: Não há bons ambientes gráficos/integrados de desenvolvimento (IDEs) para Perl
Provável origem: Preferência dos programadores Perl por editores de texto como vi/vim/emacs.
Realidade: Existem ótimas IDEs prontas para desenvolvimento integrado de código Perl, com coloração de sintaxe e recursos de auto-completar - algumas até integradas ao depurador (perl debugger), possibilitando execução passo-a-passo, análise de variáveis e breakpoints.

voltar ao início



Mito: Perl é só para *NIX (Linux, BSD, etc)
Provável origem: O interpretador perl ter sido originalmente desenvolvido em ambientes *NIX; Perl ser mais popular em ambientes *NIX.
Realidade: Perl suporta processadores de 64 bits já a algum tempo e é extremamente portátil. De fato, programas Perl rodam em mais de 60 plataformas, incluindo Windows e Mac OS X - na maioria dos casos sem nenhuma modificação. Existem portes de Perl até para Symbian e iPhone! Para efeitos de comparação, Java, uma linguagem considerada portátil, roda em aproximadamente 20 plataformas diferentes. Naturalmente, assim como em qualquer outra linguagem multiplataforma, é preciso que o programador tome cuidado certo cuidado ao desenvolver seu software, como evitar chamadas explícitas a programas externos, ou usar elementos particulares de um determinado sistema de arquivos ou sistema operacional.

voltar ao início