<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
So aproveitando a oportunidade.<br><br>Estou brincando com brinquedinhos novos.<br>Mas ainda não entendi uma coisa.<br><br>Aqui eu quero escrever na tela so o que for documento, não quero o que for diretorio.<br>Na unha eu sei fazer, eu quero fazer isso usando o modulo Path::Class.<br><br>Abaixo não esta dando muito certo.<br>O que errei??<br><br>use Path::Class;
<br> <br>my $dir  = dir('Parse');
<br>my $s = $dir->open or die "cant open: $!";
<br>my @o = $s->read;
<br>foreach my $p (@o){
<br>    if ($p->file){
<br>        print $p;
<br>    }
<br>}<br><br><div><div id="SkyDrivePlaceholder"></div>> Date: Thu, 29 Nov 2012 19:52:45 -0200<br>> From: thiagoglauco@ticursos.net<br>> To: rio-pm@pm.org<br>> Subject: Re: [Rio-pm] Chaves de hash<br>> <br>> Só para ser chato:<br>> <br>> > popular um hash inteiro já com os grupos montados,<br>> <br>> popular<br>> adj. 2 g.<br>> 1. Relativo ou pertencente ao povo.<br>> 2. Que é usado ou comum entre o povo.<br>> 3. Que é do agrado do povo.<br>> 4. Vulgar, notório.<br>> 5. Democrático.<br>> s. m.<br>> 6. Homem do povo.<br>> <br>> povoar - Conjugar<br>> (povo + -oar)<br>> v. tr.<br>> 1. Fundar povoações em.<br>> 2. Estabelecer habitantes em.<br>> 3. Disseminar animais para reprodução.<br>> 4. Dispor grande quantidade de árvores em.<br>> 5. Dispor grande quantidade de plantas (ex.: povoar o terreno de <br>> vinha).<br>> <br>> >>>6. [Por extensão]  Encher com determinada coisa (ex.: a notícia <br>> >>> povoou a sua vida com alegria).<br>> <br>> v. pron.<br>> 7. Encher-se de habitantes.<br>> <br>> <br>> Em 2012-11-29 19:41, Renato Santos escreveu:<br>> > Assim,<br>> > não sei se tem muita diferença na memoria entre um $h e um %s, <br>> ><br>> > eu costumo usar $h por habito mesmo, mas poderia ser push<br>> > @{$h{$grupo}} sem problemas, talvez até @$h{$grupo} funcione certo<br>> ><br>> > O 'evitar o loop' q eu digo, é você popular um hash inteiro já com os<br>> > grupos montados, por exemplo ,se o grupo for a cada 10 numeros reais,<br>> > voce poderia retornar<br>> > "-30:-20" como chave para todos os valores de entrada dessa funcao, e<br>> > popular tudo de uma vez só, no lugar de ler as chaves a cada pergunta<br>> > de intervalo<br>> ><br>> > 2012/11/29 Aureliano Guedes <guedes_1000@hotmail.com><br>> ><br>> >> Renato, fiquei sem entender, no meu caso não esta fazendo so um <br>> >> loop? E qual a diferença entre usar um hash %h ou tranformar $h em um <br>> >> hash??<br>> >> Desculpe as perguntas é que não faço nenhum curso ligado a <br>> >> computação logo as vezes fico "boiando".<br>> >><br>> >> Thiago, segue o script caso tenha também algo a <br>> >> modificar/acrescentar a nível das minhas péssimas práticas.<br>> >><br>> >> use warnings;<br>> >> use strict;<br>> >> use Path::Class;<br>> >><br>> >> #Guardar os valores em um hash acessado pelo valor do mfe<br>> >> sub h_energy{       <br>> >>     my $data = shift;<br>> >>     my $file = file($data)->openr();<br>> >>     my %hmfe = ();       <br>> >>     my $mirna;<br>> >>     my $record;<br>> >>    <br>> >>     while (my $linha = <$file>) {<br>> >>         if ( $linha =~ m{target:.*} ) {<br>> >>             $record = $linha . $record if ($record);<br>> >>             $hmfe{$mirna} = $record if ($mirna);<br>> >>             $mirna = $+{mirna};<br>> >>             $record = q() if ($record);<br>> >>         }<br>> >>         elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){<br>> >>             $mirna = $1;<br>> >>             $record .= $linha;<br>> >>         }<br>> >>          else {<br>> >>             $record .= $linha;<br>> >>          }<br>> >>     }<br>> >>     return %hmfe;<br>> >> }<br>> >><br>> >> sub termofilter{<br>> >>     my ($data, $min, $max) = @_;<br>> >>     my %d = h_energy($data);<br>> >><br>> >>     foreach my $keys (keys %d){<br>> >>         if($keys >= $min and $keys <= $max){<br>> >>             print $keys . "n";<br>> >>         }<br>> >>     }<br>> >> }<br>> >> termofilter("hybrid.txt", "-30", "-20");<br>> >><br>> >>> Date: Thu, 29 Nov 2012 17:27:15 -0200<br>> >><br>> >>> From: thiagoglauco@ticursos.net<br>> >>> To: rio-pm@pm.org<br>> >> > Subject: Re: [Rio-pm] Chaves de hash<br>> >>><br>> >>> Onde estou agora o firewall bloqueia o pastebin. Pela sua <br>> >>> explicação,<br>> >>> verificar por regex seria uma solução segura. O número sera <br>> >>> convertido<br>> >>> para um string e, se a sua regex prevê uma margem segura para a<br>> >> > imprecisão do ponto flutuante na sua aplicação, funciona sem <br>> >> problemas.<br>> >>><br>> >>> Em 2012-11-29 16:59, Aureliano Guedes escreveu:<br>> >>> > Nossa, aqui virou uma arena de ideias, da para aprender muita <br>> >>> coisa<br>> >> > > so lendo.<br>> >>> ><br>> >>> > O problema é o seguinte, eu tenho uma lista nesse formato:<br>> >>> ><br>> >>> > target: 01010101<br>> >>> > length: 581<br>> >>> > miRNA : hsa-miR-15a<br>> >>> > length: 22<br>> >> > ><br>> >>> > mfe: -24.4 kcal/mol<br>> >>> > p-value: 0.334111<br>> >>> ><br>> >>> > position 244<br>> >>> > target 5' C UCUCCUGUGGUCUCU G U 3'<br>> >>> > CACA GACCA GUGCUGUU<br>> >>> > GUGU UUGGU CACGACGA<br>> >> > > miRNA 3' AAUA U 5'<br>> >>> ><br>> >>> > Conforme este arquivo http://pastebin.com/9v6WFUT7 [1]<br>> >>> ><br>> >>> > Eu quero filtrar essa lista de acordo com o valor de mfe.<br>> >> > ><br>> >>> > Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.<br>> >>> ><br>> >>> > Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya [2]<br>> >> > ><br>> >>> > Funcionou, o problema era sono. Não percebi que a regex estava<br>> >>> > pegando um espaço.<br>> >>> ><br>> >>> > Quanto a usar reais como chave de hash, se eu tiver dois reais <br>> >>> iguais<br>> >>> > poderá ser um problema para acessar os valores,<br>> >> > > mas em toda regra existe sua exceção.<br>> >>> ><br>> >>> > No meu caso, o que me importa é que mfe esteja no intervalo<br>> >>> > determinado.<br>> >>> ><br>> >>> > Caso descordem seria uma honra ler a explicação de qualquer um de<br>> >> > > vocês.<br>> >>> ><br>> >>> >> Date: Thu, 29 Nov 2012 16:44:50 -0200<br>> >>> >> From: thiagoglauco@ticursos.net<br>> >>> >> To: rio-pm@pm.org<br>> >> > >> Subject: Re: [Rio-pm] Chaves de hash<br>> >>> >><br>> >>> >> Um exemplo mais preciso:<br>> >>> >><br>> >>> >> $ uname -a<br>> >>> >> SunOS cg01spo 5.10 Generic_138888-03 sun4v sparc<br>> >> > >> SUNW,SPARC-Enterprise-T5120<br>> >>> >><br>> >>> >> $ perl -E '<br>> >>> >> if (0.2 > 0.19999999999999997){<br>> >>> >> say "0.2 is greater than 0.19999999999999997";}<br>> >> > >> else {<br>> >>> >> say "Floating Point is not true real"};'<br>> >>> >> 0.2 is greater than 0.19999999999999997<br>> >>> >> $<br>> >>> >><br>> >>> >> $ perl -E '<br>> >> > >> if (0.2 > 0.19999999999999998){<br>> >>> >> say "0.2 is greater than 0.19999999999999998";}<br>> >>> >> else {<br>> >>> >> say "Floating Point is not true real"};'<br>> >> > >> Floating Point is not true real<br>> >>> >> $<br>> >>> >><br>> >>> >> Por que é importante saber essas coisas?<br>> >>> >> http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html [3]<br>> >> > >><br>> >>> >><br>> >>> >><br>> >>> >><br>> >>> >><br>> >>> >><br>> >>> >> Em 2012-11-29 15:13, thiagoglauco@ticursos.net escreveu:<br>> >> > >> >> Não se compara reais por igualdade.<br>> >>> >> > Se você tem erro na igualdade, terá nas outras comparações se <br>> >>> a<br>> >>> >> > diferença entre os números for menor que o maior acréscimo<br>> >> > >> suportado<br>> >>> >> > pela plataforma:<br>> >>> >> ><br>> >>> >> > $ perl -E '<br>> >>> >> > if (0.2 > 0.19999999999999999999999999999999999999999999){<br>> >>> >> >> say "0.2 is greater than<br>> >> > >> 0.19999999999999999999999999999999999999";}<br>> >>> >> >> else {<br>> >>> >> >> say "Floating Point is not true real"};'<br>> >>> >> > Floating Point is not true real<br>> >> > >> > $<br>> >>> >> ><br>> >>> >> > $ perl -E '<br>> >>> >> > if (0.2 > 0.199999){<br>> >>> >> > say "0.2 is greater than 0.199999";}<br>> >>> >> > else {<br>> >> > >> > say "Floating Point is not true real"};'<br>> >>> >> > 0.2 is greater than 0.199999<br>> >>> >> > $<br>> >>> >> ><br>> >>> >> > Então, comparar pontos flutuantes não é seguro. Nem igualdade, <br>> >>> nem<br>> >> > >> > maio, nem menor.<br>> >>> >> ><br>> >>> >> > E mais: garanto que se você quer usar um número real como <br>> >>> chave de<br>> >>> >> > Hash você tem um problema na análise da lógica do problema que<br>> >> > >> está<br>> >>> >> > enfrentando e como solucioná-lo.<br>> >>> >> ><br>> >>> >> ><br>> >>> >> > Em 2012-11-29 10:36, Blabos de Blebe escreveu:<br>> >>> >> >> Na verdade é o contrário, não?<br>> >> > >> >><br>> >>> >> >> Não se compara reais por igualdade.<br>> >>> >> >><br>> >>> >> >> Se você usa reais como chaves de hash, você tem algum <br>> >>> problema...<br>> >>> >> >><br>> >> > >> >> Ao não controlar a representação interna em ponto flutuante, <br>> >> você<br>> >>> >> >> pode<br>> >>> >> >> nunca mais alcançar o valor relacionado à chave, se usar um<br>> >>> >> número<br>> >> > >> >> real como chave, pois qualquer bit diferente, mesmo que<br>> >>> >> arredondando<br>> >>> >> >> no mesmo número vai resultar num cálculo diferente na tabela<br>> >>> >> hash.<br>> >> > >> >><br>> >>> >> >> Igualdade entre númros reais constuma ser definida como algo<br>> >>> >> assim:<br>> >>> >> >><br>> >>> >> >> sub float_equal {<br>> >>> >> >> my ($first, $second) = @_;<br>> >> > >> >> my $threshold = 0.00000001 # arbitrário<br>> >>> >> >> return abs( $first - $second ) < $threshold;<br>> >>> >> >> }<br>> >>> >> >><br>> >>> >> >> Converter para string antes de usar como chave de hash também <br>> >>> não<br>> >> > >> me<br>> >>> >> >> parece saudável, pois, embora a string vá funcionar bem no <br>> >>> hash,<br>> >>> >> >> você<br>> >>> >> >> não garante que a conversão vai resultar sempre na mesma <br>> >>> string,<br>> >> > >> e<br>> >>> >> >> aí<br>> >>> >> >> vc se ferra do mesmo jeito.<br>> >>> >> >><br>> >>> >> >> Por outro lado, se você nunca vai acessar o elemento do hash<br>> >>> >> através<br>> >> > >> >> da chave, um foreach por keys() ou values() vai te retornar <br>> >> os<br>> >>> >> >> valores...<br>> >>> >> >><br>> >>> >> >> Mas aí eu te perguntaria por que rails você está usando hash <br>> >>> pra<br>> >> > >> >> isso...<br>> >>> >> >><br>> >>> >> >><br>> >>> >> >><br>> >>> >> >> On Thu, Nov 29, 2012 at 6:47 AM, <thiagoglauco@ticursos.net><br>> >> > >> wrote:<br>> >>> >> >>> Existe um problema aqui, diferente da comparação.<br>> >>> >> >>> A comparação de reais é problemática devido a estrutura <br>> >>> interna<br>> >>> >> do<br>> >>> >> >>> ponto<br>> >> > >> >>> flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não <br>> >> é do<br>> >>> >> >>> Perl, mas<br>> >>> >> >>> das regras de aproximação usada pelos processadores.<br>> >>> >> >>><br>> >> > >> >>> Rounding rules<br>> >>> >> >>><br>> >>> >> >>> The standard defines five rounding rules. The first two <br>> >>> round to<br>> >>> >> a<br>> >>> >> >>> nearest<br>> >> > >> >>> value; the others are called directed roundings:<br>> >>> >> >>> Roundings to nearest<br>> >>> >> >>><br>> >>> >> >>> Round to nearest, ties to even – rounds to the nearest <br>> >>> value;<br>> >> > >> >>> if the<br>> >>> >> >>> number falls midway it is rounded to the nearest value with <br>> >>> an<br>> >>> >> even<br>> >>> >> >>> (zero)<br>> >>> >> >>> least significant bit, which occurs 50% of the time; this is <br>> >>> the<br>> >> > >> >>> default for<br>> >>> >> >>> binary floating-point and the recommended default for <br>> >>> decimal.<br>> >>> >> >>> Round to nearest, ties away from zero – rounds to the <br>> >>> nearest<br>> >> > >> >>> value; if<br>> >>> >> >>> the number falls midway it is rounded to the nearest value <br>> >>> above<br>> >>> >> >>> (for<br>> >>> >> >>> positive numbers) or below (for negative numbers); this is<br>> >> > >> intended<br>> >>> >> >>> as an<br>> >>> >> >>> option for decimal floating point.<br>> >>> >> >>><br>> >>> >> >>> Directed roundings<br>> >>> >> >>><br>> >> > >> >>> Round toward 0 – directed rounding towards zero (also known <br>> >> as<br>> >>> >> >>> truncation).<br>> >>> >> >>> Round toward +∞ – directed rounding towards positive <br>> >>> infinity<br>> >> > >> >>> (also<br>> >>> >> >>> known as rounding up or ceiling).<br>> >>> >> >>> Round toward −∞ – directed rounding towards negative <br>> >>> infinity<br>> >>> >> >>> (also<br>> >> > >> >>> known as rounding down or floor).<br>> >>> >> >>><br>> >>> >> >>> Se a comparação for inevitável, converta o seu número para<br>> >>> >> string e<br>> >>> >> >>> compare<br>> >> > >> >>> ou determine um nível de precisão aceitável e faça bit a <br>> >> bit.<br>> >>> >> >>><br>> >>> >> >>> Em 2012-11-28 21:42, Aureliano Guedes escreveu:<br>> >>> >> >>>><br>> >> > >> >>>> Ola Monges.<br>> >>> >> >>>><br>> >>> >> >>>> Estou com um problema simples mas que não acho a solução.<br>> >>> >> >>>><br>> >>> >> >>>> Eu tenho um hash onde as chaves são valores numericos reais <br>> >>> (a<br>> >> > >> >>>> maioria negativo e quase nenhum inteiro).<br>> >>> >> >>>> Estou limitando esses valores por um maximo e um minimo.<br>> >>> >> >>>><br>> >>> >> >>>> foreach my $keys (keys %d) {<br>> >> > >> >>>> if ($keys <= $min and $keys >= $max) {<br>> >>> >> >>>> print "$d{$keys}";<br>> >>> >> >>>> }<br>> >>> >> >>>> }<br>> >>> >> >>>><br>> >> > >> >>>> Problema que não da certo.<br>> >>> >> >>>> Ha algo de errado aqui??<br>> >>> >> >>>><br>> >>> >> >>>> _______________________________________________<br>> >> > >> >>>> Rio-pm mailing list<br>> >>> >> >>>> Rio-pm@pm.org<br>> >>> >> >>>> http://mail.pm.org/mailman/listinfo/rio-pm [4]<br>> >> > >> >>><br>> >>> >> >>><br>> >>> >> >>> _______________________________________________<br>> >>> >> >>> Rio-pm mailing list<br>> >>> >> >>> Rio-pm@pm.org<br>> >> > >> >>> http://mail.pm.org/mailman/listinfo/rio-pm [4]<br>> >>> >> >> _______________________________________________<br>> >> > >> >> Rio-pm mailing list<br>> >> > >> >> Rio-pm@pm.org<br>> >>> >> >> http://mail.pm.org/mailman/listinfo/rio-pm [4]<br>> >> > >> ><br>> >>> >> > _______________________________________________<br>> >>> >> > Rio-pm mailing list<br>> >>> >> > Rio-pm@pm.org<br>> >> > >> > http://mail.pm.org/mailman/listinfo/rio-pm [4]<br>> >>> >><br>> >>> >> _______________________________________________<br>> >> > >> Rio-pm mailing list<br>> >> > >> Rio-pm@pm.org<br>> >>> >> http://mail.pm.org/mailman/listinfo/rio-pm [4]<br>> >>> ><br>> >> > > _______________________________________________<br>> >>> > Rio-pm mailing list<br>> >>> > Rio-pm@pm.org<br>> >>> > http://mail.pm.org/mailman/listinfo/rio-pm [4]<br>> >> ><br>> >>> _______________________________________________<br>> >>> Rio-pm mailing list<br>> >>> Rio-pm@pm.org<br>> >>> http://mail.pm.org/mailman/listinfo/rio-pm [4]<br>> >><br>> >> _______________________________________________<br>> >> Rio-pm mailing list<br>> >> Rio-pm@pm.org<br>> >> http://mail.pm.org/mailman/listinfo/rio-pm [4]<br>> ><br>> > --<br>> ><br>> > Saravá,<br>> > Renato CRON<br>> ><br>> > http://www.renatocron.com/blog/ [5]<br>> > @renato_cron [6]<br>> ><br>> ><br>> > Links:<br>> > ------<br>> > [1] http://pastebin.com/9v6WFUT7<br>> > [2] http://pastebin.com/Dnhv0Zya<br>> > [3] http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html<br>> > [4] http://mail.pm.org/mailman/listinfo/rio-pm<br>> > [5] http://www.renatocron.com/blog/<br>> > [6] http://twitter.com/#!/renato_cron<br>> ><br>> > _______________________________________________<br>> > Rio-pm mailing list<br>> > Rio-pm@pm.org<br>> > http://mail.pm.org/mailman/listinfo/rio-pm<br>> <br>> _______________________________________________<br>> Rio-pm mailing list<br>> Rio-pm@pm.org<br>> http://mail.pm.org/mailman/listinfo/rio-pm<br></div>                                          </div></body>
</html>