<?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>2012-05-18T20:15:30Z</updated>
    <subtitle>Associação Portuguesa de Programadores Perl</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 5.02</generator>

<entry>
    <title>Perl Code Sprint - Dia 2</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2012/05/perl-code-sprint---dia-2.html" />
    <id>tag:perl.pt,2012://2.106</id>

    <published>2012-05-18T20:03:07Z</published>
    <updated>2012-05-18T20:15:30Z</updated>

    <summary> O segundo dia de Perl Code Sprint terminou há menos de 10 minutos. Tivemos quatro submissões aceites, e uma quinta submissão que não chegou a ser submetida correctamente.Mas, ao contrário da primeira prova, em que as soluções só começaram...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perlcodesprint" label="perl code sprint" 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/assets_c/2012/03/perlcodesprint-thumb-150x145-34-thumb-150x145-35.png"><img alt="Thumbnail image for Thumbnail image for perlcodesprint.png" src="http://perl.pt/assets_c/2012/05/perlcodesprint-thumb-150x145-34-thumb-150x145-35-thumb-150x145-36.png" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" height="145" width="150" /></a> <div>O segundo dia de Perl Code Sprint terminou há menos de 10 minutos. Tivemos quatro submissões aceites, e uma quinta submissão que não chegou a ser submetida correctamente.<br /><br />Mas, ao contrário da primeira prova, em que as soluções só começaram a aparecer três horas depois do enunciado estar público, desta vez tivemos a primeira submissão 22 minutos depois do enunciado ter sido disponibilizado. É certo que o enunciado era bem mais simples, mas também é sinal que os participantes começam a estar mais propensos para o tipo de enunciados que preparamos.<br /><br />Tal como da última vez, na versão alargada deste post podem ler o enunciado original, bem como uma solução. Desta vez escolhemos a primeira que foi aceite, submetida por André Santos. Não sabemos se é a melhor, a mais bonita, a mais eficiente ou simplesmente a mais pequena. É, simplesmente, a que foi submetida primeiro por um participante.<br /></div>]]>
        <![CDATA[<h1 style="font-size: larger; border-bottom: solid 1px" id="C:-Express-o-Regular-Inversa">C: Expressão Regular Inversa</h1>

<h2 id="Introdu-o">Introdução</h2>

<p>As expressões regulares são uma ferramenta bastante comum em Perl, e podem ser usadas para descobrir frases em textos ou palavras em frases. Em algumas disciplinas da ciência, por exemplo na química ou na biologia, pode ser útil conseguir encontrar não uma palavra (ou frase) mas também a sua inversa.</p>

<h2 id="Problema">Problema</h2>

<p>Construir um program que calcule a expressão regular inversa para uma expressão regular simples que use apenas um pequeno conjunto dos operadores existentes. O programa deve suportar inverter expressões regulares que incluam os seguintes operadores: <code>{}</code>,<code>[]</code>, <code>*</code> e <code>+</code>.</p>

<p>O programa deve receber como primeiro argumento uma string que representa a expressão regular a inverter, e deve imprimir uma linha com a respectiva expressão regular invertida entre <code>/</code>.</p>

<h2 id="Exemplos">Exemplos</h2>

<pre><code>  $ programa "ab+[aeiou]*rt"
  /tr[aeiou]*b+a/
  
  $ programa "ab+[aeiou]{10,20}r{2,}t"
  /tr{2,}[aeiou]{10,20}b+a/</code></pre>

<h2 id="Autor">Autor</h2>

<p>Rui Mendes <code><rcm em di.uminho.pt></code></p>

<h1 style="font-size: larger; border-bottom: solid 1px" >Solução</h1>

<style type="text/css">
.pygments .hll { background-color: #ffffcc }
.pygments  { background: #f8f8f8; }
.pygments .c { color: #8f5902; font-style: italic } /* Comment */
.pygments .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
.pygments .g { color: #000000 } /* Generic */
.pygments .k { color: #204a87; font-weight: bold } /* Keyword */
.pygments .l { color: #000000 } /* Literal */
.pygments .n { color: #000000 } /* Name */
.pygments .o { color: #ce5c00; font-weight: bold } /* Operator */
.pygments .x { color: #000000 } /* Other */
.pygments .p { color: #000000; font-weight: bold } /* Punctuation */
.pygments .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
.pygments .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */
.pygments .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
.pygments .cs { color: #8f5902; font-style: italic } /* Comment.Special */
.pygments .gd { color: #a40000 } /* Generic.Deleted */
.pygments .ge { color: #000000; font-style: italic } /* Generic.Emph */
.pygments .gr { color: #ef2929 } /* Generic.Error */
.pygments .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.pygments .gi { color: #00A000 } /* Generic.Inserted */
.pygments .go { color: #000000; font-style: italic } /* Generic.Output */
.pygments .gp { color: #8f5902 } /* Generic.Prompt */
.pygments .gs { color: #000000; font-weight: bold } /* Generic.Strong */
.pygments .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.pygments .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
.pygments .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */
.pygments .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */
.pygments .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */
.pygments .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */
.pygments .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */
.pygments .kt { color: #204a87; font-weight: bold } /* Keyword.Type */
.pygments .ld { color: #000000 } /* Literal.Date */
.pygments .m { color: #0000cf; font-weight: bold } /* Literal.Number */
.pygments .s { color: #4e9a06 } /* Literal.String */
.pygments .na { color: #c4a000 } /* Name.Attribute */
.pygments .nb { color: #204a87 } /* Name.Builtin */
.pygments .nc { color: #000000 } /* Name.Class */
.pygments .no { color: #000000 } /* Name.Constant */
.pygments .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */
.pygments .ni { color: #ce5c00 } /* Name.Entity */
.pygments .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
.pygments .nf { color: #000000 } /* Name.Function */
.pygments .nl { color: #f57900 } /* Name.Label */
.pygments .nn { color: #000000 } /* Name.Namespace */
.pygments .nx { color: #000000 } /* Name.Other */
.pygments .py { color: #000000 } /* Name.Property */
.pygments .nt { color: #204a87; font-weight: bold } /* Name.Tag */
.pygments .nv { color: #000000 } /* Name.Variable */
.pygments .ow { color: #204a87; font-weight: bold } /* Operator.Word */
.pygments .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
.pygments .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */
.pygments .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */
.pygments .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */
.pygments .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */
.pygments .sb { color: #4e9a06 } /* Literal.String.Backtick */
.pygments .sc { color: #4e9a06 } /* Literal.String.Char */
.pygments .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
.pygments .s2 { color: #4e9a06 } /* Literal.String.Double */
.pygments .se { color: #4e9a06 } /* Literal.String.Escape */
.pygments .sh { color: #4e9a06 } /* Literal.String.Heredoc */
.pygments .si { color: #4e9a06 } /* Literal.String.Interpol */
.pygments .sx { color: #4e9a06 } /* Literal.String.Other */
.pygments .sr { color: #4e9a06 } /* Literal.String.Regex */
.pygments .s1 { color: #4e9a06 } /* Literal.String.Single */
.pygments .ss { color: #4e9a06 } /* Literal.String.Symbol */
.pygments .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
.pygments .vc { color: #000000 } /* Name.Variable.Class */
.pygments .vg { color: #000000 } /* Name.Variable.Global */
.pygments .vi { color: #000000 } /* Name.Variable.Instance */
.pygments .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */

</style>

<div style="font-family: monospace; padding: 5px;" class="pygments">
<table class="highlighttable"><tr><td class="code"><div class="highlight"><pre><a name="l-1"></a><span class="c1">#!/usr/bin/env perl </span>
<a name="l-2"></a>
<a name="l-3"></a><span class="k">use</span> <span class="n">strict</span><span class="p">;</span> <span class="k">use</span> <span class="n">warnings</span><span class="p">;</span>
<a name="l-4"></a><span class="k">use</span> <span class="n">feature</span> <span class="sx">qw/say/</span><span class="p">;</span>
<a name="l-5"></a>
<a name="l-6"></a>
<a name="l-7"></a><span class="k">my</span> <span class="nv">$regexp</span> <span class="o">=</span> <span class="nb">shift</span><span class="p">;</span>
<a name="l-8"></a><span class="k">my</span> <span class="nv">$pxeger</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="p">;</span>
<a name="l-9"></a>
<a name="l-10"></a><span class="k">my</span> <span class="nv">$char</span>  <span class="o">=</span> <span class="sx">qr{\w}</span><span class="p">;</span>
<a name="l-11"></a><span class="k">my</span> <span class="nv">$set</span>   <span class="o">=</span> <span class="sx">qr{\[.*?\]}</span><span class="p">;</span>
<a name="l-12"></a><span class="k">my</span> <span class="nv">$mult</span>  <span class="o">=</span> <span class="sx">qr/(?:{.*?}|\+|\*)/</span><span class="p">;</span>
<a name="l-13"></a>
<a name="l-14"></a><span class="k">my</span> <span class="nv">$changes</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<a name="l-15"></a><span class="k">while</span> <span class="p">(</span><span class="nv">$changes</span><span class="p">)</span> <span class="p">{</span>
<a name="l-16"></a>	<span class="nv">$changes</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<a name="l-17"></a>	<span class="k">if</span> <span class="p">(</span><span class="nv">$regexp</span> <span class="o">=~</span> <span class="sr">s/^($char)($mult?)//</span><span class="p">){</span>
<a name="l-18"></a>		<span class="nv">$pxeger</span> <span class="o">=</span><span class="nv">$2</span><span class="o">.</span><span class="nv">$pxeger</span> <span class="k">if</span> <span class="nb">defined</span><span class="p">(</span><span class="nv">$2</span><span class="p">);</span>
<a name="l-19"></a>		<span class="nv">$pxeger</span> <span class="o">=</span><span class="nv">$1</span><span class="o">.</span><span class="nv">$pxeger</span><span class="p">;</span>
<a name="l-20"></a>		<span class="nv">$changes</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<a name="l-21"></a>	<span class="p">}</span>
<a name="l-22"></a>	<span class="k">if</span> <span class="p">(</span><span class="nv">$regexp</span> <span class="o">=~</span> <span class="sr">s/^($set)($mult?)//</span><span class="p">){</span>
<a name="l-23"></a>		<span class="nv">$pxeger</span> <span class="o">=</span><span class="nv">$2</span><span class="o">.</span><span class="nv">$pxeger</span> <span class="k">if</span> <span class="nb">defined</span><span class="p">(</span><span class="nv">$2</span><span class="p">);</span>
<a name="l-24"></a>		<span class="nv">$pxeger</span> <span class="o">=</span><span class="nv">$1</span><span class="o">.</span><span class="nv">$pxeger</span><span class="p">;</span>
<a name="l-25"></a>		<span class="nv">$changes</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<a name="l-26"></a>	<span class="p">}</span>
<a name="l-27"></a>
<a name="l-28"></a><span class="p">}</span>
<a name="l-29"></a>
<a name="l-30"></a><span class="n">say</span> <span class="s">&quot;/$pxeger/&quot;</span><span class="p">;</span>
</pre></div>
</td></tr></table>
</div>
]]>
    </content>
</entry>

<entry>
    <title>Perl Code Sprint - Dia 1</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2012/05/perl-code-sprint---dia-1.html" />
    <id>tag:perl.pt,2012://2.105</id>

    <published>2012-05-16T20:05:07Z</published>
    <updated>2012-05-16T20:15:41Z</updated>

    <summary>Foi ontem às nove da noite que iniciou o primeiro dia (ou primeira prova) do Perl Code Sprint. Dos 17 inscritos tivemos apenas quatro soluções submetidas. No entanto, é importante realçar que, dado que só serão considerados os quatro melhores...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perlcodesprint" label="perl code sprint" 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/assets_c/2012/03/perlcodesprint-thumb-150x145-34.png"><img alt="Thumbnail image for perlcodesprint.png" src="http://perl.pt/assets_c/2012/03/perlcodesprint-thumb-150x145-34-thumb-150x145-35.png" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="145" width="150" /></a>Foi ontem às nove da noite que iniciou o primeiro dia (ou primeira prova) do Perl Code Sprint. Dos 17 inscritos tivemos apenas quatro soluções submetidas. No entanto, é importante realçar que, dado que só serão considerados os quatro melhores tempos, todos os participantes estão, ainda, em jogo.<br /><br />O melhor tempo, para o problema de ontem, foi três horas e quarenta e quatro minutos. Era um problema relativamente simples, mas cuja resolução, para ser simples, precisa do uso de alguns truques.<br /><br />Para os interessados, abram a versão alargada desta notícia, quer para ler o enunciado do problema, quer para ver uma das soluções (no caso concreto deste problema, apresentamos a solução modelo, escrita pelo Alberto Simões.<br /> 

<div style="margin-top:10px;height:15px" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://www.zemanta.com/?px" title="Enhanced by Zemanta"><img style="border:none;float:right" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=21b8307d-c27b-47a4-8a14-79cd277eadb7" alt="Enhanced by Zemanta" /></a></div>]]>
        <![CDATA[
<h1  style="font-size: larger" id="B:-Sub--rvores-Partilhadas">Enunciado B: Sub-Árvores Partilhadas</h1>

<h2 id="Introdu-o">Introdução</h2>

<p>Considere árvores de identificadores em que as folhas e os nodos são identificadores. A seguinte árvore:</p>

<pre><code>                    f0
             ________|________
            /        |    |   \
           f1       f2   f3   f3
        ____|____    |    |    |
       /    |    \   |    |    |
       a    b   f2   b   f2   f2
                 |        |    |
                 |        |    |
                 a        a    a</code></pre>

<p>Pode ser representada como:</p>

<pre><code>  f0(f1(a,b,f2(a),f2(b),f3(f2(a))),f3(f2(a)))</code></pre>

<p>Em muitas situações existem sub-árvores comuns (sub-árvores com o mesmo valor). Neste caso é possível calular uma representação usando sub-árvores partilhadas. Esta representação traz vantagens para tarefas de processamento e manutenção.</p>

<h2 id="Problema">Problema</h2>

<p>Construir um program que cria a lista de sub-árvores únicas existentes. O resultado deve ser uma lista de identificadores únicos, um por linha, e cada apontador para uma sub-árvore deve ser um <code>#</code> seguindo de um número inteiro. Os espaços na definião original devem ser ignorados. O programa deve receber como primeiro argumento uma string que representa a definição da árvore.</p>

<p>O exemplo ilustrado na introdução deve produzir o seguinte resultado:</p>

<pre><code>  $ programa &quot;f0(f1(a,b,f2(a),f2(b),f3(f2(a))),f3(f2(a)))&quot;
  #1=a
  #2=b
  #3=f2(#1)
  #4=f2(#2)
  #5=f3(#3)
  #6=f1(#1,#2,#3,#4,#5)
  #7=f0(#6,#5)</code></pre>

<p>Note que a ordem apresentada não é a única. Só deve ter cuidado que as sub-árvores partilhadas são definidas antes de serem usadas.</p>

<h2 id="Restri-es">Restrições</h2>

<p>Os nomes de funções ou de variáveis são identificadores típicos. Começam por uma letra minúscula, à qual se podem seguir mais letras minúsculas ou dígitos. Assim, todos os seguintes exemplos são identificadores válidos: <code>a</code>, <code>f1</code>, <code>abc</code>, <code>a493b34d</code>.</p>

<h2 id="Exemplos">Exemplos</h2>

<pre><code>  $ programa f0(f1(a,b,f2(a),f3(f2(a))),f3(f2(a)))
  #1=a
  #2=b
  #3=f2(#1)
  #4=f3(#3)
  #5=f1(#1,#2,#3,#4)
  #6=f0(#5,#4)</code></pre>

<h2 id="Autor">Autor</h2>

<p>José João Almeida <code>&lt;jj@di.uminho.pt</code>&gt;</p>

<h1 style="font-size: larger">Solução</h1>

<pre>
#!/usr/bin/perl

use strict;
use warnings;

my $args = shift @ARGV;
my ($saves, $sevas);
my $nsaves = 0;

while ($args !~ /^#\d+$/) {
    next if $args =~ s{([a-z][a-z0-9]*)([),]|$)}{save($1)."$2"}e;
    next if $args =~ s{([a-z][a-z0-9]*\(#\d+(?:,#\d+)*\))}{save($1)}e;
}

for (sort { $a <=> $b } keys %$sevas) {
    printf "#%d=%s\n", $_, $sevas->{$_}
}

sub save {
    my $term = shift;
    if (!exists($saves->{$term})) {
        $saves->{$term} = ++$nsaves;
        $sevas->{$nsaves} = $term;
    }
    return "#".$saves->{$term};
}
</pre>]]>
    </content>
</entry>

<entry>
    <title>Inscrições no Perl Code Sprint 2012</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2012/05/inscricoes-no-perl-code-sprint.html" />
    <id>tag:perl.pt,2012://2.104</id>

    <published>2012-05-04T13:54:07Z</published>
    <updated>2012-05-04T13:57:47Z</updated>

    <summary> O Perl Code Sprint inicia já no próximo dia 15. Neste momento temos poucos inscritos para o que esperávamos. Há muitos programadores Perl em Portugal, bem capazes de resolver os problemas que vos propomos com uma perna às costas.No...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perlcodesprint" label="perl code sprint" 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/perlcodesprint.png"><img alt="perlcodesprint.png" src="http://perl.pt/assets_c/2012/03/perlcodesprint-thumb-150x145-34.png" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" height="145" width="150" /></a> <div>O Perl Code Sprint inicia já no próximo dia 15. Neste momento temos poucos inscritos para o que esperávamos. Há muitos programadores Perl em Portugal, bem capazes de resolver os problemas que vos propomos com uma perna às costas.<br /><br />No sentido de tentar facilitar a participação de todos, o concurso passou das 19h00 para as <b>21h00.</b> Assim, deverão ter tempo de sair do emprego, chegar a casa, jantar, dar um beijo à mulher e sentar-se em frente do terminal.<br /><br />Do mesmo modo, adiamos a inscrição para o dia 7 de Maio. Lembrem-se que podem sempre fazer-se sócios previamente, se estiverem com fé em ganhar uma viagem à Yet Another Perl Conference, Europe, 2012, em Frankfurt.<br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Damian Conway em Portugal</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2012/04/damian-conway-em-lisboa.html" />
    <id>tag:perl.pt,2012://2.103</id>

    <published>2012-04-24T13:31:42Z</published>
    <updated>2012-04-24T13:38:25Z</updated>

    <summary><![CDATA[Damian Conway estará em Lisboa na próxima semana para ministrar duas formações de um dia cada:Mastering Vim (detalhes&nbsp;aqui) - 3 de MaioNew Features of the Modern Perls (mais informação&nbsp;aqui) - 4 de MaioO custo de cada uma destas formações é...]]></summary>
    <author>
        <name>Nuno Carvalho</name>
        
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[<div><span style="background-color: rgba(255, 255, 255, 0.917969); color: rgb(34, 34, 34); font-family: arial, sans-serif; ">Damian Conway estará em Lisboa na próxima semana para ministrar duas formações de um dia cada:</span></div><div><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; background-color: rgba(255, 255, 255, 0.917969); "><br /></span></div><div><ul><li><font color="#222222" face="arial, sans-serif"><span style="background-color: rgba(255, 255, 255, 0.917969); ">Mastering Vim (detalhes&nbsp;</span></font><a href="http://damian.conway.org/Courses/MasteringVim.html">aqui</a>) - 3 de Maio</li><li><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; background-color: rgba(255, 255, 255, 0.917969); ">New Features of the Modern Perls (mais informação&nbsp;</span><a href="http://damian.conway.org/Courses/NewPerl.html">aqui</a>) - 4 de Maio</li></ul><div><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; background-color: rgba(255, 255, 255, 0.917969); ">O custo de cada uma destas formações é de 210 € (mais IVA), mas há um desconto para quem se inscrever nas duas.</span></div></div><div><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; background-color: rgba(255, 255, 255, 0.917969); "><br /></span></div><div><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; background-color: rgba(255, 255, 255, 0.917969); ">Mais informações e inscrições no site da Caixa Mágica no&nbsp;</span><a href="http://www.caixamagica.pt/damianconway/">site</a>.<span style="background-color: rgba(255, 255, 255, 0.917969); color: rgb(34, 34, 34); font-family: arial, sans-serif; ">&nbsp;</span></div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Perl Code Sprint 2012 - Mais Detalhes</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2012/04/perl-code-sprint-2012---mais-d.html" />
    <id>tag:perl.pt,2012://2.102</id>

    <published>2012-04-06T19:40:30Z</published>
    <updated>2012-04-06T19:52:18Z</updated>

    <summary> Neste momento temos 5 inscritos para o PCS, secção de sócios, e 8 na secção de não sócios (13 no total). Estamos a contar com bastantes mais interessados, mas acreditamos que sejam necessários mais detalhes para vos aguçar o...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perlcodesprint" label="perl code sprint" 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 perlcodesprint.png" src="http://perl.pt/assets_c/2012/03/perlcodesprint-thumb-150x145-34.png" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="145" width="150" /> <div>Neste momento temos 5 inscritos para o PCS, secção de sócios, e 8 na secção de não sócios (13 no total). Estamos a contar com bastantes mais interessados, mas acreditamos que sejam necessários mais detalhes para vos aguçar o interesse.<br /><br />Uma das questões que nos colocaram foi qual o tempo envolvido na resolução de cada um dos exercícios. É claro que não podemos aferir esse valor corretamente, já que depende de um conjunto de fatores, como a eficiência em escrever código Perl ou a rapidez com que possam interpretar corretamente o enunciado. Em média, a nossa estimativa é que não tome mais de 30 minutos para qualquer um dos exercícios (sendo que alguns poderão ser resolvidos em pouco mais que 5 ou 10 minutos).<br /><br />Para ajudar a cativar o interesse, transcrevemos aqui o exercício de teste, que cada participante, assim que receber o respetivo utilizador e palavra-chave (ainda estamos em atraso nesse processo) deve tentar resolver, para compreender o funcionamento do Mooshak, a plataforma de avaliação automática de soluções:<br /><br /><blockquote>Construir um programa que receber como argumento um ficheiro que contém uma lista de palavras, uma por linha, e calcule o número de letras em cada palavra. O resultado deve ser impresso no seguinte formato:<br /><br />
<pre style="border: 1px solid rgb(153, 153, 153);">&lt;palavra&gt;: &lt;número de letras&gt;
</pre>
<br /><br />Um exemplo de um ficheiro chamado <tt>palavras.txt</tt> com palavras pode ser:
<br /><br />
<pre style="border: 1px solid rgb(153, 153, 153);">anda
nada
rolha
</pre>
<br />A execução deve obter:<br /><br />
<pre style="border: 1px solid rgb(153, 153, 153);">&nbsp; $ programa palavras.txt
&nbsp; anda: 4
&nbsp; nada: 4
&nbsp; rolha: 5</pre><br /></blockquote>Simples, não vos parece?<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:none;float:right" class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=b734e94c-13d7-4d6f-85b6-f9fd4e6850dd" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>Perl Code Sprint 2012</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2012/03/perl-code-sprint-2012.html" />
    <id>tag:perl.pt,2012://2.101</id>

    <published>2012-03-15T20:53:11Z</published>
    <updated>2012-03-21T13:04:19Z</updated>

    <summary> A APPP está a organizar um concurso de programação Perl. Será um concurso virtual, em que os participantes são convidados a resolver pequenos problemas usando a linguagem Perl. Serão disponibilizados 6 problemas (um por dia, em vários dias de...</summary>
    <author>
        <name>Alberto Simões</name>
        <uri>http://null.perl-hackers.net/</uri>
    </author>
    
    <category term="concurso" label="Concurso" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perlcodesprint" label="Perl Code Sprint" 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/perlcodesprint.png"><img alt="perlcodesprint.png" src="http://perl.pt/assets_c/2012/03/perlcodesprint-thumb-150x145-34.png" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="145" width="150" /></a> <div>A APPP está a organizar um concurso de programação <a class="zem_slink" href="http://www.perl.org/" title="Perl" rel="homepage" target="_blank">Perl</a>. Será um concurso virtual, em que os participantes são convidados a resolver pequenos problemas usando a linguagem Perl. Serão disponibilizados 6 problemas (um por dia, em vários dias de Maio) e serão recebidas soluções usando um sistema de avaliação automática.<br /><br />O <a href="http://perl.pt/perl-code-sprint.html">regulamento</a> está disponível, e as inscrições terminam a 30 de Abril (inscrição gratuita e aberta a qualquer membro da comunidade Perl em Portugal). Existirão duas tabelas classificativas, para sócios APPP e não sócios, e prémios para os três vencedores (em cada uma das tabelas classificativas).<br /><br />Contamos com a vossa participação.<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=418056c9-ff69-44c2-93bf-738a11865b09" alt="Enhanced by Zemanta" /></a></div>]]>
        
    </content>
</entry>

<entry>
    <title>YAPC::Europe 2012</title>
    <link rel="alternate" type="text/html" href="http://perl.pt/2012/02/yapceurope-2012.html" />
    <id>tag:perl.pt,2012://2.99</id>

    <published>2012-02-06T14:56:45Z</published>
    <updated>2012-02-06T15:03:23Z</updated>

    <summary>A edição europeia da Yet Another Perl Cconference (YAPC::EU) para o ano de 2012 já tem datas marcadas, vai decorrer entre o dia 20 e 22 de Agosto na cidade de Frankfurt, Alemanha.A chamada para apresentações já se encontra aberta,...</summary>
    <author>
        <name>Nuno Carvalho</name>
        
    </author>
    
    <category term="yacpeu" label="yacp::eu" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://perl.pt/">
        <![CDATA[A edição europeia da Yet Another Perl Cconference (YAPC::EU) para o ano de 2012 já tem datas marcadas, vai decorrer entre o dia 20 e 22 de Agosto na cidade de Frankfurt, Alemanha.<div><font color="#000000" face="Arial"><span style="font-size: 14px; line-height: 18px;"><br /></span></font></div><div><div>A chamada para apresentações já se encontra aberta, sendo 15 de Julho o prazo para submissões. Mais infomações no&nbsp;<a href="http://act.yapc.eu/ye2012/">site</a>&nbsp;oficial, ou no&nbsp;<a href="http://blogs.perl.org/users/yapceurope_2012/">blog&nbsp;</a>&nbsp;oficial.</div><div><br /></div></div>]]>
        
    </content>
</entry>

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

</feed>

