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:<br><br><code><br>my $string = "Estou feliz, passei em Matematica Discreta I, feliz!";
<br>printf "Apareceu %s vezes...\n", scalar($string =~ s/(feliz)/$1/g);<br></code><br><br><div><span class="gmail_quote">Em 01/12/07, <b class="gmail_sendername">Marco A P D'Andrade</b> <<a href="mailto:mdacwb@gmail.com">
mdacwb@gmail.com</a>> escreveu:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hummm...<br><br>Posso estar enganado, mas acho que existem mais nuancias...
<br>(daqui não tenho como testar, e quero dar meu pitaco ;) )<br><br>Reforçando o contexto scalar da regex, com o argumento "g" já é feita<br>a pesquisa completa.<br><br>my $string = 'Estou feliz, passei em Matematica Discreta I, feliz!';
<br>printf "Apareceu %s vezes...\n", scalar($string =~ m/feliz/g);<br><br>Se fosse utilizado um foreach, em vez do while eu não teria tanta<br>dúvida sobre o loop, pois seriam avaliados todos os elementos<br>retornados, já o while, não sei se na proxima interação ele refará a
<br>pesquisa...<br><br>Ok... devia ter testado, mas queria dar o pitaco ;)<br><br>Sds,<br>Marco Antonio<br><br>Em 01/12/07, Lorn<<a href="mailto:lorn.br@gmail.com">lorn.br@gmail.com</a>> escreveu:<br>> Você estava checando só uma vez :P precisa checar até acabar toda a frase :)
<br>><br>><br>> use warnings;<br>> use strict;<br>><br>> my $cont;<br>> my $string = 'Estou feliz, passei em Matematica Discreta I, feliz!';<br>> &aparece($string);<br>><br>> sub aparece{
<br>> my $frase = shift();<br>> while ($string =~ m/feliz/g){<br>> $cont++;<br>> };<br>> print "Feliz apareceu $cont vezes\n";<br>> }<br>><br>> On Dec 1, 2007 11:41 AM, gabriel lima <
<a href="mailto:gabriellima333@hotmail.com">gabriellima333@hotmail.com</a>> wrote:<br>> ><br>> ><br>> > Olá pessoal tudo bem?<br>> > Estava tentando criar uma sub-rotina simples apenas<br>> > para estudo da linguagem Perl. Esta sub-rotina mostra
<br>> > quantas vezes uma palavra aparece em uma string.<br>> > O problema é que ela só retorna 1, ou seja, fala que<br>> > só acha esta palavra uma vez, mesmo tendo aparecido<br>> > repetida vezes na string, veja:
<br>> ><br>> > #! D:\Perl\bin\Perl.exe<br>> ><br>> > use warnings;<br>> > use strict;<br>> ><br>> > my $cont;<br>> > my $string = 'Estou feliz, passei em Matematica Discreta I, feliz!';
<br>> > &aparece($string);<br>> ><br>> > sub aparece{<br>> > my $frase = shift();<br>> > $cont++ if $string =~ m/feliz/;<br>> > print "Feliz apareceu $cont vezes\n";
<br>> > }<br>> ><br>> > Saída -> Feliz apareceu 1 vezes<br>> ><br>> > ________________________________<br>> Receba as últimas notícias do Brasil e do mundo direto no seu Messenger! É<br>
> GRÁTIS! Assine já!<br>> > _______________________________________________<br>> > Rio-pm mailing list<br>> > <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>> > <a href="http://mail.pm.org/mailman/listinfo/rio-pm">
http://mail.pm.org/mailman/listinfo/rio-pm</a><br>> ><br>><br>><br>><br>> --<br>> Lindolfo "Lorn" Rodrigues<br>> - <a href="http://www.slackwarezine.com.br">www.slackwarezine.com.br</a><br>
> - <a href="http://lornlab.org">http://lornlab.org</a><br>> - <a href="http://sao-paulo.pm.org">http://sao-paulo.pm.org</a><br>> use Catalyst;<br>> _______________________________________________<br>> Rio-pm mailing list
<br>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>><br>_______________________________________________
<br>Rio-pm mailing list<br><a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/rio-pm">http://mail.pm.org/mailman/listinfo/rio-pm</a><br></blockquote></div><br><br clear="all">
<br>-- <br>[]'s Fernando