[Rio-pm] Expressão Regular m//

Blabos de Blebe blabos em gmail.com
Sábado Dezembro 1 17:14:31 PST 2007


Concordo.

Eng de Software deve vir em primeiro lugar, não por mim, mas por quem vai
dar manutenção no meu código depois, que poderá me chamar de elegante
ou porco, conforme o caso.

Em produção eu preferiria a versão da FAQ, que aliás também é pequena e
por 3 caracteres não empatou com a minha:

<code>
$_="Estou feliz, passei em Matematica Discreta I, feliz!";
$c++while/feliz/g;print"Apareceu $c vezes...\n"
</code>




On Dec 1, 2007 11:02 PM, Marco A P D'Andrade <mdacwb em gmail.com> wrote:

> Gabriel,
>
> Bem, já deu pra perceber que existe mais de uma maneira de se fazer
> algo, e o pessoal se empolga em descobrir alternativas.
>
> Mas lembre-se de se concentrar em qualquer uma que seja legível para
> vc, e resolva o seu problema.
>
> Após algum tempo aprendendo as varias alternativas será interessante
> se concentrar nas versões mais legiveis, pois versões de dificil
> interpretação tendem a dificultar qualquer manutenção futura (em
> termos de sistemas).
>
> Sds,
> Marco Antonio
>
> Em 01/12/07, Blabos de Blebe<blabos em gmail.com> escreveu:
> > Breno, digamos que ao inves de $string a variavel fosse $s, vc teria 48.
> >
> > Nesse caso eu apelaria para
> >
> > <code>
> > $_="Estou feliz, passei em Matematica Discreta I, feliz!";
> > $_=@_=/feliz/g;print"Apareceu $_ vezes...\n"
> > </code>
> >
> > E descartada a primeira linha, eu teria 44.
> > Tá valendo?
> >
> >
> >
> > On Dec 1, 2007 9:49 PM, breno <breno em rio.pm.org> wrote:
> >
> > > Pra golfe, realmente. Mas como resposta para a pergunta do Gabriel
> > > (que está aprendendo Perl ainda) acho que a melhor é a que está no
> > > próprio FAQ do Perl, parecida com a versão do Lorn:
> > >
> > > ------------------8<-----------------
> > >
> > > $cont++ while $string =~ /feliz/g;
> > >
> > > ------------------8<-----------------
> > >
> > > Agora, se estamos falando de golfe, aí vai a minha tacada!
> > >
> > > (supondo a linha anterior como: my $string = "Estou feliz, passei em
> > > Matematica Discreta I, feliz!";
> > > e a saida como tendo que ser "apareceu X vezes..." e quebrar linha no
> > final)
> > > $c=@b=$string=~/feliz/g;print"apareceu $c vezes...\n"
> > >
> > > 53 caracteres :-)
> > >
> > > obs: redução da versão do Fernando, que aparentemente esqueceu que a
> > > diferença entre o print e o printf é grande :-P
> > >
> > > []s
> > >
> > > -b
> > >
> > >
> > >
> > >
> > > On Dec 1, 2007 6:31 PM, Fernando Oliveira <fernandocorrea em gmail.com>
> > wrote:
> > > > sim...mas ainda tenho menos caracteres...
> > > >
> > > > Em 01/12/07, Blabos de Blebe < blabos em gmail.com> escreveu:
> > > > >
> > > > >
> > > > >
> > > > > Detalhe besta, como quase disse o fernando, m// no contexto de
> lista
> > > > retorna $1, $2, ..., $N,
> > > > > porém utilizando o modificador g, retorna todas as substrings que
> > > > combinaram. Depois é só
> > > > > contar o tamanho da lista.
> > > > >
> > > > > E, não, eu não sabia isso de cabeça, é que eu to nesse capítulo do
> > > > livro... :p
> > > > >
> > > > > O exemplo do livro diz algo parecido com
> > > > >
> > > > > <code>
> > > > >
> > > > > my $string = "Estou feliz, passei em Matematica Discreta I,
> feliz!";
> > > > > printf "Apareceu %s vezes...\n", $c=@b=$string=~/feliz/g;
> > > > >
> > > > > </code>
> > > > >
> > > > > Na verdade era mais pra <code> scalar( @b = $string =~ /feliz/g );
> > > > </code>, que eu
> > > > > achei longo, mas mais legível.
> > > > >
> > > > > Espero ter ajudado
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > On Dec 1, 2007 1:46 PM, Fernando Oliveira <
> fernandocorrea em gmail.com>
> > > > wrote:
> > > > >
> > > > > > o m//g em contexto de lista retorna uma lista com $1, $2, ...,
> $N.
> > Mas
> > > > em contexto estalar só retorna um booleano... uma solução com menor
> > > > performance, mas com menos caracteres q o for, seria:
> > > > > >
> > > > > > <code>
> > > > > >
> > > > > > my $string = "Estou feliz, passei em Matematica Discreta I,
> feliz!";
> > > > > > printf "Apareceu %s vezes...\n", scalar($string =~
> s/(feliz)/$1/g);
> > > > > > </code>
> > > > > >
> > > > > >
> > > > > > Em 01/12/07, Marco A P D'Andrade < mdacwb em gmail.com> escreveu:
> > > > > >
> > > > > >
> > > > > >
> > > > > > > Hummm...
> > > > > > >
> > > > > > > Posso estar enganado, mas acho que existem mais nuancias...
> > > > > > > (daqui não tenho como testar, e quero dar meu pitaco ;) )
> > > > > > >
> > > > > > > Reforçando o contexto scalar da regex, com o argumento "g" já
> é
> > feita
> > > > > > > a pesquisa completa.
> > > > > > >
> > > > > > > my $string = 'Estou feliz, passei em Matematica Discreta I,
> > feliz!';
> > > > > > > printf "Apareceu %s vezes...\n", scalar($string =~ m/feliz/g);
> > > > > > >
> > > > > > > Se fosse utilizado um foreach, em vez do while eu não teria
> tanta
> > > > > > > dúvida sobre o loop, pois seriam avaliados todos os elementos
> > > > > > > retornados, já o while, não sei se na proxima interação ele
> refará
> > a
> > > > > > > pesquisa...
> > > > > > >
> > > > > > > Ok... devia ter testado, mas queria dar o pitaco ;)
> > > > > > >
> > > > > > > Sds,
> > > > > > > Marco Antonio
> > > > > > >
> > > > > > > Em 01/12/07, Lorn< lorn.br em gmail.com> escreveu:
> > > > > > > > Você estava checando só uma vez :P precisa checar até acabar
> > toda a
> > > > frase :)
> > > > > > > >
> > > > > > > >
> > > > > > > > use warnings;
> > > > > > > > use strict;
> > > > > > > >
> > > > > > > > my $cont;
> > > > > > > > my $string = 'Estou feliz, passei em Matematica Discreta I,
> > feliz!';
> > > > > > > > &aparece($string);
> > > > > > > >
> > > > > > > > sub aparece{
> > > > > > > >   my $frase = shift();
> > > > > > > >   while ($string =~ m/feliz/g){
> > > > > > > >     $cont++;
> > > > > > > >   };
> > > > > > > >   print "Feliz apareceu $cont vezes\n";
> > > > > > > > }
> > > > > > > >
> > > > > > > > On Dec 1, 2007 11:41 AM, gabriel lima <
> > gabriellima333 em hotmail.com>
> > > > wrote:
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Olá pessoal tudo bem?
> > > > > > > > > Estava tentando criar uma sub-rotina simples apenas
> > > > > > > > > para estudo da linguagem Perl. Esta sub-rotina mostra
> > > > > > > > > quantas vezes uma palavra aparece em uma string.
> > > > > > > > > O problema é que ela só retorna 1, ou seja, fala que
> > > > > > > > > só acha esta palavra uma vez, mesmo tendo aparecido
> > > > > > > > > repetida vezes na string, veja:
> > > > > > > > >
> > > > > > > > > #! D:\Perl\bin\Perl.exe
> > > > > > > > >
> > > > > > > > > use warnings;
> > > > > > > > > use strict;
> > > > > > > > >
> > > > > > > > > my $cont;
> > > > > > > > > my $string = 'Estou feliz, passei em Matematica Discreta
> I,
> > > > feliz!';
> > > > > > > > > &aparece($string);
> > > > > > > > >
> > > > > > > > > sub aparece{
> > > > > > > > >   my $frase = shift();
> > > > > > > > >   $cont++ if $string =~ m/feliz/;
> > > > > > > > >   print "Feliz apareceu $cont vezes\n";
> > > > > > > > > }
> > > > > > > > >
> > > > > > > > > Saída -> Feliz apareceu 1 vezes
> > > > > > > > >
> > > > > > > > > ________________________________
> > > > > > > > Receba as últimas notícias do Brasil e do mundo direto no
> seu
> > > > Messenger! É
> > > > > > > > GRÁTIS! Assine já!
> > > > > > > > >
> > _______________________________________________
> > > > > > > > > Rio-pm mailing list
> > > > > > > > > Rio-pm em pm.org
> > > > > > > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > Lindolfo "Lorn" Rodrigues
> > > > > > > > - www.slackwarezine.com.br
> > > > > > > > - http://lornlab.org
> > > > > > > > - http://sao-paulo.pm.org
> > > > > > > > use Catalyst;
> > > > > > > > _______________________________________________
> > > > > > > > Rio-pm mailing list
> > > > > > > > Rio-pm em pm.org
> > > > > > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > > > > > >
> > > > > > > _______________________________________________
> > > > > > > Rio-pm mailing list
> > > > > > > Rio-pm em pm.org
> > > > > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > []'s Fernando
> > > > > > _______________________________________________
> > > > > > Rio-pm mailing list
> > > > > > Rio-pm em pm.org
> > > > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > > > >
> > > > >
> > > > >
> > > > > _______________________________________________
> > > > >
> > > > > Rio-pm mailing list
> > > > > Rio-pm em pm.org
> > > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > []'s Fernando
> > > > _______________________________________________
> > >
> > >
> > >
> > > > Rio-pm mailing list
> > > > Rio-pm em pm.org
> > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > >
> > > _______________________________________________
> > > Rio-pm mailing list
> > > Rio-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/rio-pm
> > >
> >
> >
> > _______________________________________________
> > Rio-pm mailing list
> > Rio-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> >
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/rio-pm/attachments/20071201/007a61ac/attachment-0001.html 


Mais detalhes sobre a lista de discussão Rio-pm