<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>perl.pt</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/" />
    <link rel="self" type="application/atom+xml" href="http://perl.pt/atom.xml" />
    <id>tag:perl.pt,2011-02-01://2</id>
    <updated>2011-10-25T12:39:59Z</updated>
    <subtitle>Associação Portuguesa de Programadores Perl</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 5.02</generator>

<entry>
    <title>#perl.pt @ irc.perl.org</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/10/perlpt-ircperlorg.html" />
    <id>tag:perl.pt,2011://2.98</id>

    <published>2011-10-25T12:37:04Z</published>
    <updated>2011-10-25T12:39:59Z</updated>

    <summary> A APPP está a dinamizar o uso do canal #perl.pt de Internet Relay Chat (IRC), no servidor irc.perl.org, para que a comunidade portuguesa possa conversar na língua lusa sobre a linguagem que nos une!O canal está aberto a toda...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="internetrelaychat" label="Internet Relay Chat" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="irc" label="IRC" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<a href="http://perl.pt/irc.png"><img alt="irc.png" src="http://perl.pt/assets_c/2011/10/irc-thumb-150x150-32.png" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="150" width="150" /></a> <div>A APPP está a dinamizar o uso do canal #perl.pt de Internet Relay Chat (IRC), no servidor irc.perl.org, para que a comunidade portuguesa possa conversar na língua lusa sobre a linguagem que nos une!<br /><br />O canal está aberto a toda a gente, seja para socializar, seja para tirar dúvidas, aprender, discutir, sugerir ou ensinar Perl.<br /><br />Apareçam.<br /></div>

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=3ee8e176-df0f-4a64-b2fb-727be34698e7" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>PtPW2011 Wrap Up</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/09/ptpw2011-wrap-up.html" />
    <id>tag:perl.pt,2011://2.97</id>

    <published>2011-09-24T13:28:51Z</published>
    <updated>2011-09-24T13:35:35Z</updated>

    <summary><![CDATA[&nbsp;Terminou ontem a edição de 2011 da Portuguese Perl Workshop. Gostariamos de agradecer novamente a todos os patrocinadores do evento: Booking.com, IT Jobs, Instituto Superior Técnico e Log. Um agradecimento especial para a Log que além de patrocionar o evento...]]></summary>
    <author>
        <name>Nuno Carvalho</name>
        
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<img alt="ptpw2011_logo_news.png" src="http://perl.pt/ptpw2011_logo_news.png" width="88" height="89" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /><br /><div>&nbsp;Terminou ontem a edição de 2011 da Portuguese Perl Workshop. Gostariamos de agradecer novamente a todos os patrocinadores do evento: Booking.com, IT Jobs, Instituto Superior Técnico e Log. Um agradecimento especial para a Log que além de patrocionar o evento também foi parceira na sua organização.<div><br /></div><div>&nbsp; Obrigado também a todos os participantes, formandos, formadores, colaboradores, associados, pessoas que deram apresentações, interessados e curiosos, e até para o ano.</div><div><br /></div><div>&nbsp;Por favor, enviem-nos qualquer questão, comentário sugestão ou crítica para ptpw2011@perl.pt, obrigado.</div></div>]]>
        
    </content>
</entry>

<entry>
    <title>Pagamento de Quotas</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/08/pagamento-de-quotas.html" />
    <id>tag:perl.pt,2011://2.96</id>

    <published>2011-08-12T14:18:59Z</published>
    <updated>2011-08-12T14:22:13Z</updated>

    <summary>Informam-se todos os sócios que estão em pagamento as quotas de 2011 da APPP que, de acordo com o regulamento interno, é no valor de 5 euro. O pagamento deve ser realizado preferencialmente por transferência bancária (NIB: 0035 0823 00008849930...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="appp" label="APPP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="apppsócios" label="appp sócios" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="quotas" label="quotas" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<img alt="Thumbnail image for Thumbnail image for onion.png" src="http://perl.pt/assets_c/2007/11/onion-thumb-80x80-thumb-80x80.png" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" height="80" width="80" />Informam-se todos os sócios que estão em pagamento as quotas de 2011 da APPP que, de acordo com o regulamento interno, é no valor de 5 euro. O pagamento deve ser realizado preferencialmente por transferência bancária (NIB: 0035 0823 00008849930 83). Agradece-se que nos enviem o comprovativo da transferência para facilitar a gestão deste processo.<br />]]>
        
    </content>
</entry>

<entry>
    <title>Effective Perl Programming </title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/08/effective-perl-programming.html" />
    <id>tag:perl.pt,2011://2.95</id>

    <published>2011-08-09T18:20:32Z</published>
    <updated>2011-08-09T18:26:26Z</updated>

    <summary><![CDATA[brian d foy vai dar a sua "Effective Perl Programming class" em Lisboa durante a edição deste ano da Portuguese Perl Workshop.Mais informações no&nbsp;site oficial....]]></summary>
    <author>
        <name>Nuno Carvalho</name>
        
    </author>
    
    <category term="ptpw2011" label="ptpw2011" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<div><img alt="ptpw2011_logo_news.png" src="http://perl.pt/ptpw2011_logo_news.png" width="88" height="89" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></div><div><meta charset="utf-8">brian d foy vai dar a sua "Effective Perl Programming class" em Lisboa durante a edição deste ano da Portuguese Perl Workshop.</div><div><br /></div><div>Mais informações no&nbsp;<a href="http://workshop.perl.pt/ptpw2011/">site oficial</a>.</div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Portuguese Perl Workshop 2011</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/07/portuguese-perl-workshop-2011.html" />
    <id>tag:perl.pt,2011://2.94</id>

    <published>2011-07-22T09:24:51Z</published>
    <updated>2011-07-22T10:27:57Z</updated>

    <summary>A Portuguese Perl Workshop está de volta, a edição deste ano vai se realizar no IST em Lisboa.Para mais informações consultar o site oficial....</summary>
    <author>
        <name>Nuno Carvalho</name>
        
    </author>
    
    <category term="ptpw2011" label="ptpw2011" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[A Portuguese Perl Workshop está de volta, a edição deste ano vai se realizar no IST em Lisboa.<img alt="ptpw2011_logo_news.png" src="http://perl.pt/ptpw2011_logo_news.png" width="88" height="89" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /><div>Para mais informações consultar o <a href="http://workshop.perl.pt/ptpw2011">site oficial</a>.</div>]]>
        
    </content>
</entry>

<entry>
    <title>Perl 5.14.0 Disponível</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/05/perl-5140-disponivel.html" />
    <id>tag:perl.pt,2011://2.93</id>

    <published>2011-05-15T20:18:15Z</published>
    <updated>2011-05-15T20:29:16Z</updated>

    <summary><![CDATA[Depois de três release candidates eis que a versão oficial do Perl 5.14.0 está disponível. Podem ir buscar o código fonte ao cpan, tentar a vossa sorte com o perlbrew, ou&nbsp;aguardarem que seja disponibilizado no vosso formato de pacote predilecto.Num...]]></summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="cpan" label="CPAN" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="unicode" label="Unicode" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<img alt="cpan.jpg" src="http://perl.pt/cpan.jpg" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" height="77" width="88" />Depois de três <i>release candidates</i> eis que a versão oficial do Perl 5.14.0 está disponível. Podem ir buscar o código fonte ao <a href="http://search.cpan.org/dist/perl-5.14.0/">cpan</a>, tentar a vossa sorte com o <a href="http://search.cpan.org/dist/App-perlbrew/">perlbrew</a>, ou&nbsp;aguardarem que seja disponibilizado no vosso formato de pacote predilecto.<br /><br />Num <i>post</i> anterior já foram listadas algumas das novidades, mas gostava de realçar as que mais me agradaram:<br /><ul><li>A base de dados <a class="zem_slink" href="http://en.wikipedia.org/wiki/Unicode" title="Unicode" rel="wikipedia">Unicode</a> foi actualizada para a versão 6.0, juntamente com correcções nas funcionalidades referentes a Unicode;</li><li>As substituições passam a suportar uma nova <i>flag</i>, denominada <i>/r</i> que permite realizar uma substituição a uma string, sem que esta seja alterada (mas o novo valor retornado). É especialmente útil para quem gosta de fazer substituições numa construção <i>map</i>.</li><li>É possível usar chavetas para definir o contexto de um pacote, com <i>package Foo { ... }</i>, o que aproxima a sintaxe a outras linguagens, como Java ou C#.</li></ul><br />Infelizmente a alteração que mais me agradou é experimental: todas as funções <i>built-in</i> que suportava arrays ou hashes, passam a suportar também referências para arrays ou hashes. Para quem usava <i>push @$array, $val</i> pode passar a utilizar directamente <i>push $array, $val</i>.<br />

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=53612041-0221-4928-8bb0-8cf44e94f5f6" alt="Enhanced by Zemanta" /></a></div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Rakudo Star 2011.04 disponível</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/04/rakudo-star-201104-disponivel.html" />
    <id>tag:perl.pt,2011://2.92</id>

    <published>2011-04-29T17:20:13Z</published>
    <updated>2011-04-29T17:26:50Z</updated>

    <summary>Foi lançada a mais recente versão do Rakudo, implementação do Perl 6 que corre sobre a máquina virtual Parrot VM. A notícia oficial pode ser consultada aqui e o link para download está disponível neste endereço...</summary>
    <author>
        <name>Nuno Carvalho</name>
        
    </author>
    
    <category term="perl6" label="Perl 6" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rakudoperl" label="Rakudo Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<div class="zemanta-img mt-image-right" style="margin: 1em; display: block; float: right; width: 110px;"><a href="http://commons.wikipedia.org/wiki/File:Camelia.svg"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Camelia.svg/300px-Camelia.svg.png" alt="Camelia, the current Perl6 logo." width="100" height="73" /></a></div>Foi lançada a mais recente versão do Rakudo, implementação do <a href="http://www.perl6.org/">Perl 6</a> que corre sobre a máquina virtual <a href="http://www.parrot.org/">Parrot VM</a>. A notícia oficial pode ser consultada <a href="http://rakudoperl.org/2011/04/28/rakudo-star-2011-04-released/">aqui</a> e o link para download está disponível <a href="http://github.com/rakudo/star/downloads.">neste endereço</a>

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><br /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>Perl 5.14.0 Release Candidate 1 disponível</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/04/perl-5140-release-candidate-1-.html" />
    <id>tag:perl.pt,2011://2.91</id>

    <published>2011-04-20T21:01:45Z</published>
    <updated>2011-04-20T21:15:36Z</updated>

    <summary><![CDATA[O primeiro candidato para a próxima versão estável do Perl, 5.14.0,&nbsp; está disponível aqui. Todas as pessoas que usam ou&nbsp; mantém programas escritos em Perl devem aproveitar esta oportunidade para confirmar que o vosso código vai continuar a funcionar correctamente...]]></summary>
    <author>
        <name>Nuno Carvalho</name>
        
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[O primeiro candidato para a próxima versão estável do Perl, 5.14.0,&nbsp; está disponível <a href="http://search.cpan.org/dist/perl-5.14.0-RC1/">aqui</a>. Todas as pessoas que usam ou&nbsp; mantém programas escritos em Perl devem aproveitar esta oportunidade para confirmar que o vosso código vai continuar a funcionar correctamente depois desta actualização. Se nos próximos dias não for encontrado nenhum problema de maior com este RC, no dia 28 de Abril vamos então ter disponivel o Perl 5.14.0. O ficheiro com a descrição das alterações e novas funcionalidades pode ser consultado <a href="http://search.cpan.org/dist/perl-5.14.0-RC1/pod/perldelta.pod">aqui</a>.<br />]]>
        
    </content>
</entry>

<entry>
    <title>Apresentação: Perl 6: Is it Christmas yet?</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/03/apresentacao-perl-6-is-it-chri.html" />
    <id>tag:perl.pt,2011://2.90</id>

    <published>2011-03-18T05:02:08Z</published>
    <updated>2011-03-18T05:10:00Z</updated>

    <summary> Mais uma vez, o evento Braga Geek Nights irá ter uma apresentação relacionada com Perl. Na verdade, Perl 6. A apresentação chama-se Perl 6: Is it Christmas yet? e irá centrar-se no estado actual da linguagem, e para que...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="braga" label="Braga" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="bragageeknights" label="Braga Geek Nights" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<img alt="Thumbnail image for presentation.gif" src="http://perl.pt/assets_c/2011/02/presentation-thumb-200x128-28.gif" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="128" width="200" /> <div>Mais uma vez, o evento <a href="http://www.facebook.com/event.php?eid=132186673521998">Braga Geek Nights</a> irá ter uma apresentação relacionada com <a class="zem_slink" href="http://www.perl.org/" title="Perl" rel="homepage">Perl</a>. Na verdade, Perl 6. A apresentação chama-se <b>Perl 6: Is it Christmas yet?</b> e irá centrar-se no estado actual da linguagem, e para que é que já se a pode usar. A apresentação será feita pelo Nuno Carvalho, e será no dia 5 de Abril, às 22h30 na Velha-a-Branca, em Braga.<br /></div>

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=8c7aab8f-1a1a-4b71-b9e9-f22d01d9d91f" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>Alojamos os Braga.pm</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/03/alojamos-os-bragapm.html" />
    <id>tag:perl.pt,2011://2.89</id>

    <published>2011-03-17T05:47:46Z</published>
    <updated>2011-03-17T05:54:10Z</updated>

    <summary> Os grupos de interesse pelo Perl, denominados na comunidade como Perl Monger Groups, ou PM Groups, têm habitualmente algumas actividade técnicas ou sociais, e além disso, habitualmente têm uma página na Internet onde se apresentam. Esta página costuma estar...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="appp" label="appp" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="bragapm" label="Braga.pm" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="lisbonpm" label="Lisbon.pm" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perlmongers" label="Perl Mongers" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<img alt="pm_logo.gif" src="http://perl.pt/pm_logo.gif" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="87" width="200" /> <div>Os grupos de interesse pelo <a class="zem_slink" href="http://www.perl.org/" title="Perl" rel="homepage">Perl</a>, denominados na comunidade como Perl Monger Groups, ou PM Groups, têm habitualmente algumas actividade técnicas ou sociais, e além disso, habitualmente têm uma página na Internet onde se apresentam. Esta página costuma estar no domínio pm.org. Exemplos nacionais são os <a href="http://lisbon.pm.org/">http://lisbon.pm.org</a>/ ou <a href="http://braga.pm.org/">http://braga.pm.org</a>. Exemplos internacionais não faltam, e podem ver uma lista completa em <a href="http://pm.org/">http://pm.org</a>/<br /><br />Essencialmente quando se fala de grupos pequenos, a manutenção de um sítio próprio com funcionalidades complicadas não compensa. Deste modo, a APPP decidiu ajudar o grupos de Perl Monger portugueses, oferecendo-lhes uma página dedicada. O primeiro grupo a juntar-se (quem sabe se não será o único) foi o Braga.pm. Bem-vindos.<br /></div>

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=cf9260d8-8259-4ddd-8ac3-e43d8a4da707" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>Perl numa linha, e Ofuscação</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/03/perl-numa-linha-e-ofuscacao.html" />
    <id>tag:perl.pt,2011://2.88</id>

    <published>2011-03-05T16:56:10Z</published>
    <updated>2011-03-05T17:11:55Z</updated>

    <summary>Todos sabemos que o Perl pode ser ilegível. Mas a verdade é que não podemos culpar a sintaxe do Perl por esta ilegibilidade, mas a imensa imaginação de quem o programa. Ora vejamos um exemplo (verídico). Considerem dois ficheiros, com...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="ofuscação" label="Ofuscação" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[Todos sabemos que o <a class="zem_slink" href="http://www.perl.org/" title="Perl" rel="homepage">Perl</a> pode ser ilegível. Mas a verdade é que não podemos culpar a sintaxe do Perl por esta ilegibilidade, mas a imensa imaginação de quem o programa. Ora vejamos um exemplo (verídico). Considerem dois ficheiros, com listas de palavras (uma palavra por linha) e que querem imprimir as palavras que constam nos dois ficheiros, e pela ordem pela qual aparecem no primeiro ficheiro.<br /><br />Pediram-me ajuda para decifrar esta linha de código, que faz exactamente o pedido:<br /><br /><b>&nbsp; perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/'&nbsp;&nbsp;
lista1 lista2&nbsp; &gt; comuns<br /></b><br />Para quem ainda está a começar a usar Perl, lembro que a opção -n faz com que a linha de código apresentada seja executada para todas as linhas dos ficheiros indicados, e a opção -e indica qual a linha de código a executar.<br /><br />O primeiro problema para perceber este código é a existência de parêntesis, ou a inexistência de parêntesis. Passo a explicar, os parêntesis apresentados fazem com que nós, instintivamente, pensemos que a condição da expressão if é apenas o que está dentro dos ditos parêntesis. Mas não, já que a sintaxe do if pós-comando considera que todo o resto da linha é a condição.<br /><br />Estamos, pois, perante este código:<br /><br /><b>&nbsp; perl -ne 'print if (($seen{$_} .= @ARGV) =~ /10$/)'&nbsp;&nbsp;
lista1 lista2&nbsp; &gt; comuns<br />
</b><br />Ou seja, na hash $seen guardamos cada linha (representada pelo $_) como chave, e como valor vamos concatenando @ARGV. Este array tem todos os parâmetros passados pela linha de comando que ainda não foram processados. Então enquanto o código é aplicado ao primeiro ficheiro, @ARGV=('lista2') e, quando passa a aplicar ao segundo ficheiro, @ARGV=().<br /><br />Passo seguinte, saber que @ARGV aparece num contexto em que o Perl espera um escalar (um dos operandos do operador de concatenação) e que, portanto, será convertido para um inteiro. O Perl converte arrays para inteiros retornando o número de elementos do array. Ora, ao processar o primeiro ficheiro, é usado o valor 1, ao processar o segundo ficheiro, é usado o valor 0.<br /><br />Se determinada palavra ocorre no primeiro ficheiro, será guardado um 1 na hash $seen. Se a palavra ocorrer no segundo ficheiro, será concatenado a esse 1 um 0. Ou seja, o valor na hash é "10". <br /><br />O passo seguinte é simples. Se o valor na hash corresponder a "10", então o valor é impresso.<br /><br />Como vêem, o Perl pode ser bastante rebuscado. Mas reparem em outras duas soluções muito parecidas e que me parecem muito mais simples de perceber (para além de mais curtas):<br /><br /><b>&nbsp;&nbsp; perl -ne 'print if ++$seen{$_} &gt; 1'&nbsp;&nbsp;
lista1 lista2 &gt; comuns</b><br /><br />ou<br /><br /><b>&nbsp;&nbsp; perl -ne 'print if $seen{$_}++'&nbsp;
lista1&nbsp; lista2&nbsp; &gt; comuns</b><br /><br />Nestes exemplos o único detalhe importante é saber que o incremento de uma variável funciona de forma diferente quando é colocado antes ou depois de uma variável. Se colocado antes, o valor é incrementado e só depois usado. Se colocado depois, o valor actual é usado na comparação, e só depois será incrementado.<br /><br />É provável que ainda vos pareçam soluções complicadas, mas hão de convir que são bastante mais simples que a inicial.<br />

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=e497e5a5-320e-4bb1-a747-cf85090f5c1c" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>Apresentação: Dancer</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/02/apresentacao-dancer.html" />
    <id>tag:perl.pt,2011://2.86</id>

    <published>2011-02-24T19:25:49Z</published>
    <updated>2011-02-24T19:48:54Z</updated>

    <summary> Na próxima Terça-Feira, dia 1 de Março, pelas 21h30, terá lugar na Velha-a-Branca, na cidade de Braga, mais uma sessão das Geek Nights. Esta sessão terá uma apresentação (breve tutorial) sobre Dancer.O Dancer é uma framework Perl para o...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="apresentação" label="Apresentação" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="braga" label="Braga" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="formação" label="Formação" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ruby" label="Ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<a href="http://perl.pt/presentation.gif"><img alt="presentation.gif" src="http://perl.pt/assets_c/2011/02/presentation-thumb-200x128-28.gif" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="128" width="200" /></a> <div>Na próxima Terça-Feira, dia 1 de Março, pelas 21h30, terá lugar na Velha-a-Branca, na cidade de <a class="zem_slink" href="http://maps.google.com/maps?ll=41.5441666667,-8.42194444444&amp;spn=0.1,0.1&amp;q=41.5441666667,-8.42194444444%20%28Braga%29&amp;t=h" title="Braga" rel="geolocation">Braga</a>, mais uma sessão das <i>Geek Nights</i>. Esta sessão terá uma apresentação (breve tutorial) sobre Dancer.<br /><br />O Dancer é uma <i>framework</i> <a href="http://www.perl.org/">Perl</a> para o desenvolvimento de aplicações <i>Web</i> com inspirações numa outra <i>framework</i> para a linguagem <i><a class="zem_slink" href="http://www.ruby-lang.org/" title="Ruby (programming language)" rel="homepage">Ruby</a></i>, de nome <i>Sinatra</i>.<br /><br />O tutorial irá focar sucintamente o que é o Dancer, como fazer o <i>bootstrap</i> a uma aplicação Dancer, e discutirá alguns detalhes sobre como o Dancer faz a gestão de pedidos HTTP.<br /></div>

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=ed098273-251d-4777-ae2a-9b78c5adb5f6" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>Perl 5.12.3</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/02/perl-5123.html" />
    <id>tag:perl.pt,2011://2.85</id>

    <published>2011-02-18T16:57:26Z</published>
    <updated>2011-02-18T17:01:38Z</updated>

    <summary>Foi há menos de um mês que a versão 5.12.3 do Perl foi disponibilizada. O responsável por esta versão é o Ricardo Signes. As alterações em relação à versão 5.12.2 não são grandes, como seria de esperar, até porque é...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="cpan" label="CPAN" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[Foi há menos de um mês que a versão 5.12.3 do <a class="zem_slink" href="http://www.perl.org/" title="Perl" rel="homepage">Perl</a> foi disponibilizada. O responsável por esta versão é o Ricardo Signes. As alterações em relação à versão 5.12.2 não são grandes, como seria de esperar, até porque é uma versão de manutenção, e não uma nova versão, como será a 5.14.<br /><br />Em relação às novidades, destaco:<br /><ul><li>Os comandos <b>keys</b>, <b>values</b> e <b>each</b> passam a funcionar também com <i>arrays</i>. Basicamente, é uma visão de um <i>array</i> como se de uma <i>hash</i> se tratasse, em que as posições são as chaves. <br /></li></ul>Além disso, foram corrigidos vários bugs, e actualizadas as versões de alguns módulos disponibilizados no core.<br />

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=1f519273-30e9-4243-a205-a3073b825828" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>O teu próprio mirror do CPAN</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/02/o-teu-proprio-mirror-do-cpan.html" />
    <id>tag:perl.pt,2011://2.84</id>

    <published>2011-02-16T18:49:49Z</published>
    <updated>2011-02-16T19:02:14Z</updated>

    <summary> É verdade que cada vez mais estamos dependentes do acesso à Internet. Temos nos telemóveis, portáteis, máquinas fotográficas. Só falta mesmo o acesso ao micro-ondas e ao frigorífico em qualquer sítio do mundo.Em todo o caso há situações em...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="cpan" label="CPAN" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="modules" label="Modules" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<img alt="Newbie Icon" src="http://perl.pt/babycammel.png" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="171" width="170" />
     <div>É verdade que cada vez mais estamos dependentes do acesso à Internet. Temos nos telemóveis, portáteis, máquinas fotográficas. Só falta mesmo o acesso ao micro-ondas e ao frigorífico em qualquer sítio do mundo.<br /><br />Em todo o caso há situações em que não se terá ligação à rede, ou então em que esta será bastante rudimentar ou cara. Nestes casos temos um ataque de nervos se precisarmos de instalar um módulo <a class="zem_slink" href="http://www.perl.org/" title="Perl" rel="homepage">Perl</a>. E esse ataque de nervos será tanto maior quanto o número de dependências que esse módulo possa vir a necessitar.<br /><br />É certo que o tamanho de um mirror completo do <a class="zem_slink" href="http://www.cpan.org/" title="CPAN" rel="homepage">CPAN</a> não é assim tão grande. Mas quem é que quer gastar mais de 30 GB de disco num mirror se pode usar esse espaço para coisas bem mais interessantes?<br /></div><br />Em todo o caso existe um módulo, chamado <a href="http://search.cpan.org/dist/CPAN-Mini/">CPAN::Mini</a> que permite a construção de um mirror local apenas com a versão mais recente de cada módulo (e não todas as versões que cada autor disponibiliza no CPAN). A instalação e configuração deste CPAN::Mini é simples.<br /><ol><li>começar por instalar o módulo com, por exemplo&nbsp; <b>cpan CPAN::Mini&nbsp; </b>(como administrador/root)</li><li>na vossa <i>home</i>, criem um ficheiro denominado <b>.minicpanrc</b> e coloquem-lhe o seguinte conteúdo:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local: /home/vossouser/CPAN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; remote: http://cpan.perl.pt/<br /><br /></li><li>é claro que podem alterar a primeira linha para o sítio onde querem o vosso mirror particular, e a segunda linha para o sítio de onde querem que o mirror seja feito.</li><li>executem o comando&nbsp; <b>minicpan</b>. Nesta altura é boa ideia que tenham uma ligação à rede com alguma largura de banda, para que não demore muito o processo de fazer download a cerca de 1.5 GB.</li></ol>Agora para usar este mirror, basta reconfigurar o vosso comando <b>cpan</b> para que use como mirror do cpan o URL file:///home/vossouser/CPAN. Num futuro post poderemos ver quais as opções disponíveis para configurar o cpan, ou que diferentes comandos temos para podermos instalar módulos Perl.<br /><br />

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=40b50c6b-2f41-4142-ab25-a130f640544e" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>Tratamento básico de Opções</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2011/02/tratamento-basico-de-opcoes.html" />
    <id>tag:perl.pt,2011://2.83</id>

    <published>2011-02-08T19:49:22Z</published>
    <updated>2011-02-08T19:57:43Z</updated>

    <summary> Ao desenvolver aplicações de linha de comando é típico querermos analisar que opções foram passadas para a aplicação para activar ou desactivar determinadas funcionalidades.Embora exista uma centena de módulos no namespace Getopt para o tratamento de opções de linha...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="getopt" label="Getopt" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="switches" label="switches" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<img alt="Newbie Icon" src="http://perl.pt/babycammel.png" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="171" width="170" /> <div>Ao desenvolver aplicações de linha de comando é típico querermos analisar que opções foram passadas para a aplicação para activar ou desactivar determinadas funcionalidades.<br /><br />Embora exista uma centena de módulos no <i>namespace</i> <a href="http://search.cpan.org/search?query=GetOpt&amp;mode=all">Getopt</a> para o tratamento de opções de linha de comando (dos quais destaco o <a href="http://search.cpan.org/dist/Getopt-WonderBra/">Getopt::WonderBra</a>, apenas pelo seu nome), o <a class="zem_slink" href="http://www.perl.org/" title="Perl" rel="homepage">Perl</a> tem a capacidade de tratar opções básicas sem a instalação de qualquer módulo. Para isso basta usar a opção -s do Perl que automaticamente transforma qualquer opção da forma -xyz na linha de comando numa variável $xyz, e as opções da forma -foo=bar numa variável $foo com o valor "var".<br /><br />Para dar um exemplo, imaginemos uma aplicação que deva suportar a opção -v, para activar o modo verboso, e a opção -user para especificar o nome do utilizador (caso contrário utilizará a variável de ambiente USER):<br /><br />&nbsp;&nbsp; #!/usr/bin/perl -s<br />&nbsp;&nbsp; use strict;<br />&nbsp;&nbsp; use warnings;<br />&nbsp;&nbsp; our ($user, $v);<br /><br />&nbsp;&nbsp; if ($v) { print "Activei modo verboso\n"; }<br /><br />&nbsp;&nbsp; $user = $user || $ENV{USER};<br /><br />&nbsp;&nbsp; printf("Activado o utilizador $user");<br /><br />Ora, o <i>our</i> é utilizado para definir variáveis globais. É boa política definir as variáveis que se pretendem utilizar com a opção -s para que, ao usar as opções <i>strict </i>e <i>warnings</i> o Perl não se queixe de variáveis não definidas. <br /></div>

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/" title="Enhanced by Zemanta"><img style="border: medium none; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=4a985618-313c-4d77-a8d0-8ac1c12da0d9" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

</feed>

