Re: [Rio-pm] Chaves de hash

2012-11-29 Thread thiagoglauco

Existe um problema aqui, diferente da comparação.
A comparação de reais é problemática devido a estrutura interna do 
ponto flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do 
Perl, mas das regras de aproximação usada pelos processadores.


Rounding rules

The standard defines five rounding rules. The first two round to a 
nearest value; the others are called directed roundings:

Roundings to nearest

Round to nearest, ties to even – rounds to the nearest value; if 
the number falls midway it is rounded to the nearest value with an even 
(zero) least significant bit, which occurs 50% of the time; this is the 
default for binary floating-point and the recommended default for 
decimal.
Round to nearest, ties away from zero – rounds to the nearest 
value; if the number falls midway it is rounded to the nearest value 
above (for positive numbers) or below (for negative numbers); this is 
intended as an option for decimal floating point.


Directed roundings

Round toward 0 – directed rounding towards zero (also known as 
truncation).
Round toward +∞ – directed rounding towards positive infinity (also 
known as rounding up or ceiling).
Round toward −∞ – directed rounding towards negative infinity (also 
known as rounding down or floor).


Se a comparação for inevitável, converta o seu número para string e 
compare ou determine um nível de precisão aceitável e faça bit a bit.


Em 2012-11-28 21:42, Aureliano Guedes escreveu:

Ola Monges.

Estou com um problema simples mas que não acho a solução.

Eu tenho um hash onde as chaves são valores numericos reais (a
maioria negativo e quase nenhum inteiro).
Estou limitando esses valores por um maximo e um minimo.

 foreach my $keys (keys %d) {
 if ($keys <= $min and $keys >= $max) {
 print "$d{$keys}";
 }
 }

Problema que não da certo.
Ha algo de errado aqui??

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Blabos de Blebe
Na verdade é o contrário, não?

Não se compara reais por igualdade.

Se você usa reais como chaves de hash, você tem algum problema...

Ao não controlar a representação interna em ponto flutuante, você pode
nunca mais alcançar o valor relacionado à chave, se usar um número
real como chave, pois qualquer bit diferente, mesmo que arredondando
no mesmo número vai resultar num cálculo diferente na tabela hash.

Igualdade entre númros reais constuma ser definida como algo assim:

sub float_equal {
my ($first, $second) = @_;
my $threshold = 0.0001 # arbitrário
return abs( $first - $second ) < $threshold;
}

Converter para string antes de usar como chave de hash também não me
parece saudável, pois, embora a string vá funcionar bem no hash, você
não garante que a conversão vai resultar sempre na mesma string, e aí
vc se ferra do mesmo jeito.

Por outro lado, se você nunca vai acessar o elemento do hash através
da chave, um foreach por keys() ou values() vai te retornar os
valores...

Mas aí eu te perguntaria por que rails você está usando hash pra isso...



On Thu, Nov 29, 2012 at 6:47 AM,   wrote:
> Existe um problema aqui, diferente da comparação.
> A comparação de reais é problemática devido a estrutura interna do ponto
> flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do Perl, mas
> das regras de aproximação usada pelos processadores.
>
> Rounding rules
>
> The standard defines five rounding rules. The first two round to a nearest
> value; the others are called directed roundings:
> Roundings to nearest
>
> Round to nearest, ties to even – rounds to the nearest value; if the
> number falls midway it is rounded to the nearest value with an even (zero)
> least significant bit, which occurs 50% of the time; this is the default for
> binary floating-point and the recommended default for decimal.
> Round to nearest, ties away from zero – rounds to the nearest value; if
> the number falls midway it is rounded to the nearest value above (for
> positive numbers) or below (for negative numbers); this is intended as an
> option for decimal floating point.
>
> Directed roundings
>
> Round toward 0 – directed rounding towards zero (also known as
> truncation).
> Round toward +∞ – directed rounding towards positive infinity (also
> known as rounding up or ceiling).
> Round toward −∞ – directed rounding towards negative infinity (also
> known as rounding down or floor).
>
> Se a comparação for inevitável, converta o seu número para string e compare
> ou determine um nível de precisão aceitável e faça bit a bit.
>
> Em 2012-11-28 21:42, Aureliano Guedes escreveu:
>>
>> Ola Monges.
>>
>> Estou com um problema simples mas que não acho a solução.
>>
>> Eu tenho um hash onde as chaves são valores numericos reais (a
>> maioria negativo e quase nenhum inteiro).
>> Estou limitando esses valores por um maximo e um minimo.
>>
>>  foreach my $keys (keys %d) {
>>  if ($keys <= $min and $keys >= $max) {
>>  print "$d{$keys}";
>>  }
>>  }
>>
>> Problema que não da certo.
>> Ha algo de errado aqui??
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread thiagoglauco

Não se compara reais por igualdade.
Se você tem erro na igualdade, terá nas outras comparações se a 
diferença entre os números for menor que o maior acréscimo suportado 
pela plataforma:


$ perl -E '
if (0.2 > 0.1999){

say "0.2 is greater than 0.19";}
else {
say "Floating Point is not true real"};'

Floating Point is not true real
$

$ perl -E '
if (0.2 > 0.19){
say "0.2 is greater than 0.19";}
else {
say "Floating Point is not true real"};'
0.2 is greater than 0.19
$

Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem 
maio, nem menor.


E mais: garanto que se você quer usar um número real como chave de Hash 
você tem um problema na análise da lógica do problema que está 
enfrentando e como solucioná-lo.



Em 2012-11-29 10:36, Blabos de Blebe escreveu:

Na verdade é o contrário, não?

Não se compara reais por igualdade.

Se você usa reais como chaves de hash, você tem algum problema...

Ao não controlar a representação interna em ponto flutuante, você 
pode

nunca mais alcançar o valor relacionado à chave, se usar um número
real como chave, pois qualquer bit diferente, mesmo que arredondando
no mesmo número vai resultar num cálculo diferente na tabela hash.

Igualdade entre númros reais constuma ser definida como algo assim:

sub float_equal {
my ($first, $second) = @_;
my $threshold = 0.0001 # arbitrário
return abs( $first - $second ) < $threshold;
}

Converter para string antes de usar como chave de hash também não me
parece saudável, pois, embora a string vá funcionar bem no hash, você
não garante que a conversão vai resultar sempre na mesma string, e aí
vc se ferra do mesmo jeito.

Por outro lado, se você nunca vai acessar o elemento do hash através
da chave, um foreach por keys() ou values() vai te retornar os
valores...

Mas aí eu te perguntaria por que rails você está usando hash pra 
isso...




On Thu, Nov 29, 2012 at 6:47 AM,   wrote:

Existe um problema aqui, diferente da comparação.
A comparação de reais é problemática devido a estrutura interna do 
ponto
flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do 
Perl, mas

das regras de aproximação usada pelos processadores.

Rounding rules

The standard defines five rounding rules. The first two round to a 
nearest

value; the others are called directed roundings:
Roundings to nearest

Round to nearest, ties to even – rounds to the nearest value; if 
the
number falls midway it is rounded to the nearest value with an even 
(zero)
least significant bit, which occurs 50% of the time; this is the 
default for

binary floating-point and the recommended default for decimal.
Round to nearest, ties away from zero – rounds to the nearest 
value; if
the number falls midway it is rounded to the nearest value above 
(for
positive numbers) or below (for negative numbers); this is intended 
as an

option for decimal floating point.

Directed roundings

Round toward 0 – directed rounding towards zero (also known as
truncation).
Round toward +∞ – directed rounding towards positive infinity 
(also

known as rounding up or ceiling).
Round toward −∞ – directed rounding towards negative infinity 
(also

known as rounding down or floor).

Se a comparação for inevitável, converta o seu número para string e 
compare

ou determine um nível de precisão aceitável e faça bit a bit.

Em 2012-11-28 21:42, Aureliano Guedes escreveu:


Ola Monges.

Estou com um problema simples mas que não acho a solução.

Eu tenho um hash onde as chaves são valores numericos reais (a
maioria negativo e quase nenhum inteiro).
Estou limitando esses valores por um maximo e um minimo.

 foreach my $keys (keys %d) {
 if ($keys <= $min and $keys >= $max) {
 print "$d{$keys}";
 }
 }

Problema que não da certo.
Ha algo de errado aqui??

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm



___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread thiagoglauco

Um exemplo mais preciso:

$ uname -a
SunOS cg01spo 5.10 Generic_13-03 sun4v sparc 
SUNW,SPARC-Enterprise-T5120


$ perl -E '
if (0.2 > 0.19997){
say "0.2 is greater than 0.19997";}
else {
say "Floating Point is not true real"};'
0.2 is greater than 0.19997
$

$ perl -E '
if (0.2 > 0.19998){
say "0.2 is greater than 0.19998";}
else {
say "Floating Point is not true real"};'
Floating Point is not true real
$

Por que é importante saber essas coisas?
http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html






Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:

Não se compara reais por igualdade.

Se você tem erro na igualdade, terá nas outras comparações se a
diferença entre os números for menor que o maior acréscimo suportado
pela plataforma:

$ perl -E '
if (0.2 > 0.1999){

say "0.2 is greater than 0.19";}
else {
say "Floating Point is not true real"};'

Floating Point is not true real
$

$ perl -E '
if (0.2 > 0.19){
say "0.2 is greater than 0.19";}
else {
say "Floating Point is not true real"};'
0.2 is greater than 0.19
$

Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
maio, nem menor.

E mais: garanto que se você quer usar um número real como chave de
Hash você tem um problema na análise da lógica do problema que está
enfrentando e como solucioná-lo.


Em 2012-11-29 10:36, Blabos de Blebe escreveu:

Na verdade é o contrário, não?

Não se compara reais por igualdade.

Se você usa reais como chaves de hash, você tem algum problema...

Ao não controlar a representação interna em ponto flutuante, você 
pode

nunca mais alcançar o valor relacionado à chave, se usar um número
real como chave, pois qualquer bit diferente, mesmo que arredondando
no mesmo número vai resultar num cálculo diferente na tabela hash.

Igualdade entre númros reais constuma ser definida como algo assim:

sub float_equal {
my ($first, $second) = @_;
my $threshold = 0.0001 # arbitrário
return abs( $first - $second ) < $threshold;
}

Converter para string antes de usar como chave de hash também não me
parece saudável, pois, embora a string vá funcionar bem no hash, 
você
não garante que a conversão vai resultar sempre na mesma string, e 
aí

vc se ferra do mesmo jeito.

Por outro lado, se você nunca vai acessar o elemento do hash através
da chave, um foreach por keys() ou values() vai te retornar os
valores...

Mas aí eu te perguntaria por que rails você está usando hash pra 
isso...




On Thu, Nov 29, 2012 at 6:47 AM,   wrote:

Existe um problema aqui, diferente da comparação.
A comparação de reais é problemática devido a estrutura interna do 
ponto
flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do 
Perl, mas

das regras de aproximação usada pelos processadores.

Rounding rules

The standard defines five rounding rules. The first two round to a 
nearest

value; the others are called directed roundings:
Roundings to nearest

Round to nearest, ties to even – rounds to the nearest value; 
if the
number falls midway it is rounded to the nearest value with an even 
(zero)
least significant bit, which occurs 50% of the time; this is the 
default for

binary floating-point and the recommended default for decimal.
Round to nearest, ties away from zero – rounds to the nearest 
value; if
the number falls midway it is rounded to the nearest value above 
(for
positive numbers) or below (for negative numbers); this is intended 
as an

option for decimal floating point.

Directed roundings

Round toward 0 – directed rounding towards zero (also known as
truncation).
Round toward +∞ – directed rounding towards positive infinity 
(also

known as rounding up or ceiling).
Round toward −∞ – directed rounding towards negative infinity 
(also

known as rounding down or floor).

Se a comparação for inevitável, converta o seu número para string e 
compare

ou determine um nível de precisão aceitável e faça bit a bit.

Em 2012-11-28 21:42, Aureliano Guedes escreveu:


Ola Monges.

Estou com um problema simples mas que não acho a solução.

Eu tenho um hash onde as chaves são valores numericos reais (a
maioria negativo e quase nenhum inteiro).
Estou limitando esses valores por um maximo e um minimo.

 foreach my $keys (keys %d) {
 if ($keys <= $min and $keys >= $max) {
 print "$d{$keys}";
 }
 }

Problema que não da certo.
Ha algo de errado aqui??

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm



___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Aureliano Guedes

Nossa, aqui virou uma arena de ideias, da para aprender muita coisa so lendo.

O problema é o seguinte, eu tenho uma lista nesse formato:

target: 01010101
length: 581
miRNA : hsa-miR-15a
length: 22

mfe: -24.4 kcal/mol
p-value: 0.334111

position  244
target 5' CUCUCCUGUGGUCUCU G   U 3'
   CACA   GACCAGUGCUGUU
   GUGU   UUGGUCACGACGA
miRNA  3'  AAUAU 5'


Conforme este arquivo http://pastebin.com/9v6WFUT7

Eu quero filtrar essa lista de acordo com o valor de mfe.

Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.

Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya

Funcionou, o problema era sono. Não percebi que a regex estava pegando um 
espaço.

Quanto a usar reais como chave de hash, se eu tiver dois reais iguais poderá 
ser um problema para acessar os valores,
mas em toda regra existe sua exceção.

No meu caso, o que me importa é que mfe esteja no intervalo determinado.

Caso descordem seria uma honra ler a explicação de qualquer um de vocês.

> Date: Thu, 29 Nov 2012 16:44:50 -0200
> From: thiagogla...@ticursos.net
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Chaves de hash
> 
> Um exemplo mais preciso:
> 
> $ uname -a
> SunOS cg01spo 5.10 Generic_13-03 sun4v sparc 
> SUNW,SPARC-Enterprise-T5120
> 
> $ perl -E '
> if (0.2 > 0.19997){
> say "0.2 is greater than 0.19997";}
> else {
> say "Floating Point is not true real"};'
> 0.2 is greater than 0.19997
> $
> 
> $ perl -E '
> if (0.2 > 0.19998){
> say "0.2 is greater than 0.19998";}
> else {
> say "Floating Point is not true real"};'
> Floating Point is not true real
> $
> 
> Por que é importante saber essas coisas?
> http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html
> 
> 
> 
> 
> 
> 
> Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:
> >> Não se compara reais por igualdade.
> > Se você tem erro na igualdade, terá nas outras comparações se a
> > diferença entre os números for menor que o maior acréscimo suportado
> > pela plataforma:
> >
> > $ perl -E '
> > if (0.2 > 0.1999){
> >> say "0.2 is greater than 0.19";}
> >> else {
> >> say "Floating Point is not true real"};'
> > Floating Point is not true real
> > $
> >
> > $ perl -E '
> > if (0.2 > 0.19){
> > say "0.2 is greater than 0.19";}
> > else {
> > say "Floating Point is not true real"};'
> > 0.2 is greater than 0.19
> > $
> >
> > Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
> > maio, nem menor.
> >
> > E mais: garanto que se você quer usar um número real como chave de
> > Hash você tem um problema na análise da lógica do problema que está
> > enfrentando e como solucioná-lo.
> >
> >
> > Em 2012-11-29 10:36, Blabos de Blebe escreveu:
> >> Na verdade é o contrário, não?
> >>
> >> Não se compara reais por igualdade.
> >>
> >> Se você usa reais como chaves de hash, você tem algum problema...
> >>
> >> Ao não controlar a representação interna em ponto flutuante, você 
> >> pode
> >> nunca mais alcançar o valor relacionado à chave, se usar um número
> >> real como chave, pois qualquer bit diferente, mesmo que arredondando
> >> no mesmo número vai resultar num cálculo diferente na tabela hash.
> >>
> >> Igualdade entre númros reais constuma ser definida como algo assim:
> >>
> >> sub float_equal {
> >> my ($first, $second) = @_;
> >> my $threshold = 0.0001 # arbitrário
> >> return abs( $first - $second ) < $threshold;
> >> }
> >>
> >> Converter para string antes de usar como chave de hash também não me
> >> parece saudável, pois, embora a string vá funcionar bem no hash, 
> >> você
> >> não garante que a conversão vai resultar sempre na mesma string, e 
> >> aí
> >> vc se ferra do mesmo jeito.
> >>
> >> Por outro lado, se você nunca vai acessar o elemento do hash através
> >> da chave, um foreach por keys() ou values() vai te retornar os
> >> valores...
> >>
> >> Mas aí eu te perguntaria por que rails você está usando hash pra 
> >> isso...
> >>
> >>
> >>
> >> On Thu, Nov 29, 2012 at 6:47 AM,   wrote:
> >>> Existe um problema aqui, diferente da comparação.
> >>> A comparação de reais é problemática devido a estrutura interna do 
> >>> ponto
> >>> flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do 
> >>> Perl, mas
> >>> das regras de aproximação usada pelos processadores.
> >>>
> >>> Rounding rules
> >>>
> >>> The standard defines five rounding rules. The first two round to a 
> >>> nearest
> >>> value; the others are called directed roundings:
> >>> Roundings to nearest
> >>>
> >>> Round to nearest, ties to even – rounds to the nearest value; 
> >>> if the
> >>> number falls midway it is rounded to the nearest value with an even 
> >>> (zero)
> >>> least significant bit, which occurs 50% of the time; this is the 
> >>> default for
> >>> binary floating-point and th

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Daniel Vinciguerra
Caso a entrada "file($data)->openr();" na linha 9 retorne um filehandle
vale a pena dar um "close $file;" antes de retornar o valor da sub também.

[]'s


*
Daniel Vinciguerra*
Web Solutions Architect and Co-Owner at Bivee
http://github.com/dvinciguerra 


2012/11/29 Aureliano Guedes 

>  Nossa, aqui virou uma arena de ideias, da para aprender muita coisa so
> lendo.
>
> O problema é o seguinte, eu tenho uma lista nesse formato:
>
> target: 01010101
> length: 581
> miRNA : hsa-miR-15a
> length: 22
>
> mfe: -24.4 kcal/mol
> p-value: 0.334111
>
> position  244
> target 5' CUCUCCUGUGGUCUCU G   U 3'
>CACA   GACCAGUGCUGUU
>GUGU   UUGGUCACGACGA
> miRNA  3'  AAUAU 5'
>
>
> Conforme este arquivo http://pastebin.com/9v6WFUT7
>
> Eu quero filtrar essa lista de acordo com o valor de mfe.
>
> Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
>
> Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya
>
> Funcionou, o problema era sono. Não percebi que a regex estava pegando um
> espaço.
>
> Quanto a usar reais como chave de hash, se eu tiver dois reais iguais
> poderá ser um problema para acessar os valores,
> mas em toda regra existe sua exceção.
>
> No meu caso, o que me importa é que mfe esteja no intervalo determinado.
>
> Caso descordem seria uma honra ler a explicação de qualquer um de vocês.
>
> > Date: Thu, 29 Nov 2012 16:44:50 -0200
> > From: thiagogla...@ticursos.net
>
> > To: rio-pm@pm.org
> > Subject: Re: [Rio-pm] Chaves de hash
> >
> > Um exemplo mais preciso:
> >
> > $ uname -a
> > SunOS cg01spo 5.10 Generic_13-03 sun4v sparc
> > SUNW,SPARC-Enterprise-T5120
> >
> > $ perl -E '
> > if (0.2 > 0.19997){
> > say "0.2 is greater than 0.19997";}
> > else {
> > say "Floating Point is not true real"};'
> > 0.2 is greater than 0.19997
> > $
> >
> > $ perl -E '
> > if (0.2 > 0.19998){
> > say "0.2 is greater than 0.19998";}
> > else {
> > say "Floating Point is not true real"};'
> > Floating Point is not true real
> > $
> >
> > Por que é importante saber essas coisas?
> > http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html
> >
> >
> >
> >
> >
> >
> > Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:
> > >> Não se compara reais por igualdade.
> > > Se você tem erro na igualdade, terá nas outras comparações se a
> > > diferença entre os números for menor que o maior acréscimo suportado
> > > pela plataforma:
> > >
> > > $ perl -E '
> > > if (0.2 > 0.1999){
> > >> say "0.2 is greater than 0.19";}
> > >> else {
> > >> say "Floating Point is not true real"};'
> > > Floating Point is not true real
> > > $
> > >
> > > $ perl -E '
> > > if (0.2 > 0.19){
> > > say "0.2 is greater than 0.19";}
> > > else {
> > > say "Floating Point is not true real"};'
> > > 0.2 is greater than 0.19
> > > $
> > >
> > > Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
> > > maio, nem menor.
> > >
> > > E mais: garanto que se você quer usar um número real como chave de
> > > Hash você tem um problema na análise da lógica do problema que está
> > > enfrentando e como solucioná-lo.
> > >
> > >
> > > Em 2012-11-29 10:36, Blabos de Blebe escreveu:
> > >> Na verdade é o contrário, não?
> > >>
> > >> Não se compara reais por igualdade.
> > >>
> > >> Se você usa reais como chaves de hash, você tem algum problema...
> > >>
> > >> Ao não controlar a representação interna em ponto flutuante, você
> > >> pode
> > >> nunca mais alcançar o valor relacionado à chave, se usar um número
> > >> real como chave, pois qualquer bit diferente, mesmo que arredondando
> > >> no mesmo número vai resultar num cálculo diferente na tabela hash.
> > >>
> > >> Igualdade entre númros reais constuma ser definida como algo assim:
> > >>
> > >> sub float_equal {
> > >> my ($first, $second) = @_;
> > >> my $threshold = 0.0001 # arbitrário
> > >> return abs( $first - $second ) < $threshold;
> > >> }
> > >>
> > >> Converter para string antes de usar como chave de hash também não me
> > >> parece saudável, pois, embora a string vá funcionar bem no hash,
> > >> você
> > >> não garante que a conversão vai resultar sempre na mesma string, e
> > >> aí
> > >> vc se ferra do mesmo jeito.
> > >>
> > >> Por outro lado, se você nunca vai acessar o elemento do hash através
> > >> da chave, um foreach por keys() ou values() vai te retornar os
> > >> valores...
> > >>
> > >> Mas aí eu te perguntaria por que rails você está usando hash pra
> > >> isso...
> > >>
> > >>
> > >>
> > >> On Thu, Nov 29, 2012 at 6:47 AM,  wrote:
> > >>> Existe um problema aqui, diferente da comparação.
> > >>> A comparação de reais é problemática devido a estrutura interna do
> > >>> ponto
> > >>> flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do
> > >>> Perl, mas
> > >>

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
Usa uma função pra normalizar o valor (multiplica por 10, divide o inteiro
por 10) ou alguma coisa que retorne o "grupo" que cada valor se encontra,
aí vc faz apenas um loop e um calculo por valor e aí vc faz assim
$ref;
For (..) {
  $grupo = funcao($_->{valor});
  push @{$ref->{$grupo}}, $_;
}

O ref vai virar um hash com os valores e dentro todos que fazem parte dele.
Em 29/11/2012 16:59, "Aureliano Guedes"  escreveu:

>  Nossa, aqui virou uma arena de ideias, da para aprender muita coisa so
> lendo.
>
> O problema é o seguinte, eu tenho uma lista nesse formato:
>
> target: 01010101
> length: 581
> miRNA : hsa-miR-15a
> length: 22
>
> mfe: -24.4 kcal/mol
> p-value: 0.334111
>
> position  244
> target 5' CUCUCCUGUGGUCUCU G   U 3'
>CACA   GACCAGUGCUGUU
>GUGU   UUGGUCACGACGA
> miRNA  3'  AAUAU 5'
>
>
> Conforme este arquivo http://pastebin.com/9v6WFUT7
>
> Eu quero filtrar essa lista de acordo com o valor de mfe.
>
> Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
>
> Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya
>
> Funcionou, o problema era sono. Não percebi que a regex estava pegando um
> espaço.
>
> Quanto a usar reais como chave de hash, se eu tiver dois reais iguais
> poderá ser um problema para acessar os valores,
> mas em toda regra existe sua exceção.
>
> No meu caso, o que me importa é que mfe esteja no intervalo determinado.
>
> Caso descordem seria uma honra ler a explicação de qualquer um de vocês.
>
> > Date: Thu, 29 Nov 2012 16:44:50 -0200
> > From: thiagogla...@ticursos.net
> > To: rio-pm@pm.org
> > Subject: Re: [Rio-pm] Chaves de hash
> >
> > Um exemplo mais preciso:
> >
> > $ uname -a
> > SunOS cg01spo 5.10 Generic_13-03 sun4v sparc
> > SUNW,SPARC-Enterprise-T5120
> >
> > $ perl -E '
> > if (0.2 > 0.19997){
> > say "0.2 is greater than 0.19997";}
> > else {
> > say "Floating Point is not true real"};'
> > 0.2 is greater than 0.19997
> > $
> >
> > $ perl -E '
> > if (0.2 > 0.19998){
> > say "0.2 is greater than 0.19998";}
> > else {
> > say "Floating Point is not true real"};'
> > Floating Point is not true real
> > $
> >
> > Por que é importante saber essas coisas?
> > http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html
> >
> >
> >
> >
> >
> >
> > Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:
> > >> Não se compara reais por igualdade.
> > > Se você tem erro na igualdade, terá nas outras comparações se a
> > > diferença entre os números for menor que o maior acréscimo suportado
> > > pela plataforma:
> > >
> > > $ perl -E '
> > > if (0.2 > 0.1999){
> > >> say "0.2 is greater than 0.19";}
> > >> else {
> > >> say "Floating Point is not true real"};'
> > > Floating Point is not true real
> > > $
> > >
> > > $ perl -E '
> > > if (0.2 > 0.19){
> > > say "0.2 is greater than 0.19";}
> > > else {
> > > say "Floating Point is not true real"};'
> > > 0.2 is greater than 0.19
> > > $
> > >
> > > Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
> > > maio, nem menor.
> > >
> > > E mais: garanto que se você quer usar um número real como chave de
> > > Hash você tem um problema na análise da lógica do problema que está
> > > enfrentando e como solucioná-lo.
> > >
> > >
> > > Em 2012-11-29 10:36, Blabos de Blebe escreveu:
> > >> Na verdade é o contrário, não?
> > >>
> > >> Não se compara reais por igualdade.
> > >>
> > >> Se você usa reais como chaves de hash, você tem algum problema...
> > >>
> > >> Ao não controlar a representação interna em ponto flutuante, você
> > >> pode
> > >> nunca mais alcançar o valor relacionado à chave, se usar um número
> > >> real como chave, pois qualquer bit diferente, mesmo que arredondando
> > >> no mesmo número vai resultar num cálculo diferente na tabela hash.
> > >>
> > >> Igualdade entre númros reais constuma ser definida como algo assim:
> > >>
> > >> sub float_equal {
> > >> my ($first, $second) = @_;
> > >> my $threshold = 0.0001 # arbitrário
> > >> return abs( $first - $second ) < $threshold;
> > >> }
> > >>
> > >> Converter para string antes de usar como chave de hash também não me
> > >> parece saudável, pois, embora a string vá funcionar bem no hash,
> > >> você
> > >> não garante que a conversão vai resultar sempre na mesma string, e
> > >> aí
> > >> vc se ferra do mesmo jeito.
> > >>
> > >> Por outro lado, se você nunca vai acessar o elemento do hash através
> > >> da chave, um foreach por keys() ou values() vai te retornar os
> > >> valores...
> > >>
> > >> Mas aí eu te perguntaria por que rails você está usando hash pra
> > >> isso...
> > >>
> > >>
> > >>
> > >> On Thu, Nov 29, 2012 at 6:47 AM,  wrote:
> > >>> Existe um problema aqui, diferente da comparação.
> > >>> A comparação de reais é problemática devido a estrutura interna do
> > >>>

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread thiagoglauco
Onde estou agora o firewall bloqueia o pastebin. Pela sua explicação, 
verificar por regex seria uma solução segura. O número sera convertido 
para um string e, se a sua regex prevê uma margem segura para a 
imprecisão do ponto flutuante na sua aplicação, funciona sem problemas.


Em 2012-11-29 16:59, Aureliano Guedes escreveu:
Nossa, aqui virou uma arena de ideias, da para aprender muita coisa 
so lendo.


O problema é o seguinte, eu tenho uma lista nesse formato:

target: 01010101
length: 581
miRNA : hsa-miR-15a
length: 22

mfe: -24.4 kcal/mol
p-value: 0.334111

position 244
target 5' C UCUCCUGUGGUCUCU G U 3'
 CACA GACCA GUGCUGUU
 GUGU UUGGU CACGACGA
miRNA 3' AAUA U 5'

Conforme este arquivo http://pastebin.com/9v6WFUT7

Eu quero filtrar essa lista de acordo com o valor de mfe.

Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.

Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya

Funcionou, o problema era sono. Não percebi que a regex estava
pegando um espaço.

Quanto a usar reais como chave de hash, se eu tiver dois reais iguais
poderá ser um problema para acessar os valores,
mas em toda regra existe sua exceção.

No meu caso, o que me importa é que mfe esteja no intervalo 
determinado.


Caso descordem seria uma honra ler a explicação de qualquer um de 
vocês.



Date: Thu, 29 Nov 2012 16:44:50 -0200
From: thiagogla...@ticursos.net
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

Um exemplo mais preciso:

$ uname -a
SunOS cg01spo 5.10 Generic_13-03 sun4v sparc
SUNW,SPARC-Enterprise-T5120

$ perl -E '
if (0.2 > 0.19997){
say "0.2 is greater than 0.19997";}
else {
say "Floating Point is not true real"};'
0.2 is greater than 0.19997
$

$ perl -E '
if (0.2 > 0.19998){
say "0.2 is greater than 0.19998";}
else {
say "Floating Point is not true real"};'
Floating Point is not true real
$

Por que é importante saber essas coisas?
http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html






Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:
>> Não se compara reais por igualdade.
> Se você tem erro na igualdade, terá nas outras comparações se a
> diferença entre os números for menor que o maior acréscimo 
suportado

> pela plataforma:
>
> $ perl -E '
> if (0.2 > 0.1999){
>> say "0.2 is greater than 
0.19";}

>> else {
>> say "Floating Point is not true real"};'
> Floating Point is not true real
> $
>
> $ perl -E '
> if (0.2 > 0.19){
> say "0.2 is greater than 0.19";}
> else {
> say "Floating Point is not true real"};'
> 0.2 is greater than 0.19
> $
>
> Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
> maio, nem menor.
>
> E mais: garanto que se você quer usar um número real como chave de
> Hash você tem um problema na análise da lógica do problema que 
está

> enfrentando e como solucioná-lo.
>
>
> Em 2012-11-29 10:36, Blabos de Blebe escreveu:
>> Na verdade é o contrário, não?
>>
>> Não se compara reais por igualdade.
>>
>> Se você usa reais como chaves de hash, você tem algum problema...
>>
>> Ao não controlar a representação interna em ponto flutuante, você
>> pode
>> nunca mais alcançar o valor relacionado à chave, se usar um 
número
>> real como chave, pois qualquer bit diferente, mesmo que 
arredondando
>> no mesmo número vai resultar num cálculo diferente na tabela 
hash.

>>
>> Igualdade entre númros reais constuma ser definida como algo 
assim:

>>
>> sub float_equal {
>> my ($first, $second) = @_;
>> my $threshold = 0.0001 # arbitrário
>> return abs( $first - $second ) < $threshold;
>> }
>>
>> Converter para string antes de usar como chave de hash também não 
me

>> parece saudável, pois, embora a string vá funcionar bem no hash,
>> você
>> não garante que a conversão vai resultar sempre na mesma string, 
e

>> aí
>> vc se ferra do mesmo jeito.
>>
>> Por outro lado, se você nunca vai acessar o elemento do hash 
através

>> da chave, um foreach por keys() ou values() vai te retornar os
>> valores...
>>
>> Mas aí eu te perguntaria por que rails você está usando hash pra
>> isso...
>>
>>
>>
>> On Thu, Nov 29, 2012 at 6:47 AM,  
wrote:

>>> Existe um problema aqui, diferente da comparação.
>>> A comparação de reais é problemática devido a estrutura interna 
do

>>> ponto
>>> flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do
>>> Perl, mas
>>> das regras de aproximação usada pelos processadores.
>>>
>>> Rounding rules
>>>
>>> The standard defines five rounding rules. The first two round to 
a

>>> nearest
>>> value; the others are called directed roundings:
>>> Roundings to nearest
>>>
>>> Round to nearest, ties to even – rounds to the nearest value;
>>> if the
>>> number falls midway it is rounded to the nearest value with an 
even

>>> (zero)
>>> least significant bit, which occurs 50% of the time; this is the
>>> default for
>>> binary floating-point and the recommended default for deci

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Aureliano Guedes

Renato, fiquei sem entender, no meu caso não esta fazendo so um loop? E qual a 
diferença entre usar um hash %h ou tranformar $h em um hash??
Desculpe as perguntas é que não faço nenhum curso ligado a computação logo as 
vezes fico "boiando".

Thiago, segue o script caso tenha também algo a modificar/acrescentar a nível 
das minhas péssimas práticas.

use warnings;
use strict;
use Path::Class;

#Guardar os valores em um hash acessado pelo valor do mfe
sub h_energy{
my $data = shift;
my $file = file($data)->openr();
my %hmfe = ();
my $mirna;
my $record;

while (my $linha = <$file>) {
if ( $linha =~ m{target:.*} ) {
$record = $linha . $record if ($record);
$hmfe{$mirna} = $record if ($mirna);
$mirna = $+{mirna};
$record = q() if ($record);
}
elsif ($linha =~ m{mfe:\s+(\S+)\s+kcal/mol}){
$mirna = $1;
$record .= $linha;
}
 else {
$record .= $linha;
 }
}
return %hmfe;
}


sub termofilter{
my ($data, $min, $max) = @_;
my %d = h_energy($data);
foreach my $keys (keys %d){
if($keys >= $min and $keys <= $max){
print $keys . "\n";
}
}
}
termofilter("hybrid.txt", "-30", "-20");

> Date: Thu, 29 Nov 2012 17:27:15 -0200
> From: thiagogla...@ticursos.net
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Chaves de hash
> 
> Onde estou agora o firewall bloqueia o pastebin. Pela sua explicação, 
> verificar por regex seria uma solução segura. O número sera convertido 
> para um string e, se a sua regex prevê uma margem segura para a 
> imprecisão do ponto flutuante na sua aplicação, funciona sem problemas.
> 
> Em 2012-11-29 16:59, Aureliano Guedes escreveu:
> > Nossa, aqui virou uma arena de ideias, da para aprender muita coisa 
> > so lendo.
> >
> > O problema é o seguinte, eu tenho uma lista nesse formato:
> >
> > target: 01010101
> > length: 581
> > miRNA : hsa-miR-15a
> > length: 22
> >
> > mfe: -24.4 kcal/mol
> > p-value: 0.334111
> >
> > position 244
> > target 5' C UCUCCUGUGGUCUCU G U 3'
> >  CACA GACCA GUGCUGUU
> >  GUGU UUGGU CACGACGA
> > miRNA 3' AAUA U 5'
> >
> > Conforme este arquivo http://pastebin.com/9v6WFUT7
> >
> > Eu quero filtrar essa lista de acordo com o valor de mfe.
> >
> > Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
> >
> > Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya
> >
> > Funcionou, o problema era sono. Não percebi que a regex estava
> > pegando um espaço.
> >
> > Quanto a usar reais como chave de hash, se eu tiver dois reais iguais
> > poderá ser um problema para acessar os valores,
> > mas em toda regra existe sua exceção.
> >
> > No meu caso, o que me importa é que mfe esteja no intervalo 
> > determinado.
> >
> > Caso descordem seria uma honra ler a explicação de qualquer um de 
> > vocês.
> >
> >> Date: Thu, 29 Nov 2012 16:44:50 -0200
> >> From: thiagogla...@ticursos.net
> >> To: rio-pm@pm.org
> >> Subject: Re: [Rio-pm] Chaves de hash
> >>
> >> Um exemplo mais preciso:
> >>
> >> $ uname -a
> >> SunOS cg01spo 5.10 Generic_13-03 sun4v sparc
> >> SUNW,SPARC-Enterprise-T5120
> >>
> >> $ perl -E '
> >> if (0.2 > 0.19997){
> >> say "0.2 is greater than 0.19997";}
> >> else {
> >> say "Floating Point is not true real"};'
> >> 0.2 is greater than 0.19997
> >> $
> >>
> >> $ perl -E '
> >> if (0.2 > 0.19998){
> >> say "0.2 is greater than 0.19998";}
> >> else {
> >> say "Floating Point is not true real"};'
> >> Floating Point is not true real
> >> $
> >>
> >> Por que é importante saber essas coisas?
> >> http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html
> >>
> >>
> >>
> >>
> >>
> >>
> >> Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:
> >> >> Não se compara reais por igualdade.
> >> > Se você tem erro na igualdade, terá nas outras comparações se a
> >> > diferença entre os números for menor que o maior acréscimo 
> >> suportado
> >> > pela plataforma:
> >> >
> >> > $ perl -E '
> >> > if (0.2 > 0.1999){
> >> >> say "0.2 is greater than 
> >> 0.19";}
> >> >> else {
> >> >> say "Floating Point is not true real"};'
> >> > Floating Point is not true real
> >> > $
> >> >
> >> > $ perl -E '
> >> > if (0.2 > 0.19){
> >> > say "0.2 is greater than 0.19";}
> >> > else {
> >> > say "Floating Point is not true real"};'
> >> > 0.2 is greater than 0.19
> >> > $
> >> >
> >> > Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
> >> > maio, nem menor.
> >> >
> >> > E mais: garanto que se você quer usar um número real como chave de
> >> > Hash você tem um problema na análise da lógica do problema que 
> >> está
> >> > enfrentando e como solucioná-lo.
> >> >
> >> >
> >> > Em 2012-11-29 10:36, Blabos de Blebe escreveu:
> >> >> Na verdade é o contrário, não?
> >> >>
> >> >> Não se compara re

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
Assim,
não sei se tem muita diferença na memoria entre um $h e um %s,

eu costumo usar $h por habito mesmo, mas poderia ser push @{$h{$grupo}} sem
problemas, talvez até @$h{$grupo} funcione certo


O 'evitar o loop' q eu digo, é você popular um hash inteiro já com os
grupos montados, por exemplo ,se o grupo for a cada 10 numeros reais, voce
poderia retornar
"-30:-20" como chave para todos os valores de entrada dessa funcao, e
popular tudo de uma vez só, no lugar de ler as chaves a cada pergunta de
intervalo

2012/11/29 Aureliano Guedes 

>  Renato, fiquei sem entender, no meu caso não esta fazendo so um loop? E
> qual a diferença entre usar um hash %h ou tranformar $h em um hash??
> Desculpe as perguntas é que não faço nenhum curso ligado a computação logo
> as vezes fico "boiando".
>
> Thiago, segue o script caso tenha também algo a modificar/acrescentar a
> nível das minhas péssimas práticas.
>
> use warnings;
> use strict;
> use Path::Class;
>
> #Guardar os valores em um hash acessado pelo valor do mfe
> sub h_energy{
> my $data = shift;
> my $file = file($data)->openr();
> my %hmfe = ();
> my $mirna;
> my $record;
>
> while (my $linha = <$file>) {
> if ( $linha =~ m{target:.*} ) {
> $record = $linha . $record if ($record);
> $hmfe{$mirna} = $record if ($mirna);
> $mirna = $+{mirna};
> $record = q() if ($record);
> }
> elsif ($linha =~ m{mfe:\s+(\S+)\s+kcal/mol}){
> $mirna = $1;
> $record .= $linha;
> }
>  else {
> $record .= $linha;
>  }
> }
> return %hmfe;
> }
>
>
> sub termofilter{
> my ($data, $min, $max) = @_;
> my %d = h_energy($data);
>
> foreach my $keys (keys %d){
> if($keys >= $min and $keys <= $max){
> print $keys . "\n";
> }
> }
> }
> termofilter("hybrid.txt", "-30", "-20");
>
> > Date: Thu, 29 Nov 2012 17:27:15 -0200
>
> > From: thiagogla...@ticursos.net
> > To: rio-pm@pm.org
> > Subject: Re: [Rio-pm] Chaves de hash
> >
> > Onde estou agora o firewall bloqueia o pastebin. Pela sua explicação,
> > verificar por regex seria uma solução segura. O número sera convertido
> > para um string e, se a sua regex prevê uma margem segura para a
> > imprecisão do ponto flutuante na sua aplicação, funciona sem problemas.
> >
> > Em 2012-11-29 16:59, Aureliano Guedes escreveu:
> > > Nossa, aqui virou uma arena de ideias, da para aprender muita coisa
> > > so lendo.
> > >
> > > O problema é o seguinte, eu tenho uma lista nesse formato:
> > >
> > > target: 01010101
> > > length: 581
> > > miRNA : hsa-miR-15a
> > > length: 22
> > >
> > > mfe: -24.4 kcal/mol
> > > p-value: 0.334111
> > >
> > > position 244
> > > target 5' C UCUCCUGUGGUCUCU G U 3'
> > > CACA GACCA GUGCUGUU
> > > GUGU UUGGU CACGACGA
> > > miRNA 3' AAUA U 5'
> > >
> > > Conforme este arquivo http://pastebin.com/9v6WFUT7
> > >
> > > Eu quero filtrar essa lista de acordo com o valor de mfe.
> > >
> > > Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
> > >
> > > Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya
> > >
> > > Funcionou, o problema era sono. Não percebi que a regex estava
> > > pegando um espaço.
> > >
> > > Quanto a usar reais como chave de hash, se eu tiver dois reais iguais
> > > poderá ser um problema para acessar os valores,
> > > mas em toda regra existe sua exceção.
> > >
> > > No meu caso, o que me importa é que mfe esteja no intervalo
> > > determinado.
> > >
> > > Caso descordem seria uma honra ler a explicação de qualquer um de
> > > vocês.
> > >
> > >> Date: Thu, 29 Nov 2012 16:44:50 -0200
> > >> From: thiagogla...@ticursos.net
> > >> To: rio-pm@pm.org
> > >> Subject: Re: [Rio-pm] Chaves de hash
> > >>
> > >> Um exemplo mais preciso:
> > >>
> > >> $ uname -a
> > >> SunOS cg01spo 5.10 Generic_13-03 sun4v sparc
> > >> SUNW,SPARC-Enterprise-T5120
> > >>
> > >> $ perl -E '
> > >> if (0.2 > 0.19997){
> > >> say "0.2 is greater than 0.19997";}
> > >> else {
> > >> say "Floating Point is not true real"};'
> > >> 0.2 is greater than 0.19997
> > >> $
> > >>
> > >> $ perl -E '
> > >> if (0.2 > 0.19998){
> > >> say "0.2 is greater than 0.19998";}
> > >> else {
> > >> say "Floating Point is not true real"};'
> > >> Floating Point is not true real
> > >> $
> > >>
> > >> Por que é importante saber essas coisas?
> > >> http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >> Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:
> > >> >> Não se compara reais por igualdade.
> > >> > Se você tem erro na igualdade, terá nas outras comparações se a
> > >> > diferença entre os números for menor que o maior acréscimo
> > >> suportado
> > >> > pela plataforma:
> > >> >
> > >> > $ perl -E '
> > >> > if (0.2 > 0.1999){
> > >> >> say "0.2 is greater than
> > >> 0.19

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread thiagoglauco
Seu primeiro erro é o operador and. No documento perlop: $ perldoc 
perlop você vai descobrir o seguinte:


 " Logical And
 Binary "and" returns the logical conjunction of the two
 surrounding expressions.  It's equivalent to && except for
 the very low precedence.  This means that it short-circuits:
 i.e., the right expression is evaluated only if the left
 expression is true.
[...]
  C-style Logical And
 Binary "&&" performs a short-circuit logical AND operation.
 That is, if the left operand is false, the right operand is
 not even evaluated.  Scalar or list context propagates down
 to the right operand if it is evaluated."

Logo, seu código

if($keys >= $min and $keys <= $max){

deveria ser if($keys >= $min && $keys <= $max){

A segunda coisa é o seu range. Não sei a precisão que seu código 
precisa. Veja isso:


 $ perl -E '
if (-30.1 >= -30 ){
say "-30.1 is equal -30? Really";}
else {
say "Floating Point is not true real"};'
-30.1 is equal -30? Really
 $


Eu faria algo como:

if($keys > $min and $keys < $max)

e, usaria, por exemplo -30.01 como min e -20.01 como max, por 
exemplo, para contornar o ponto flutuante, ou usaria um módulo 
matemático, como o Math::BigFloat.


http://perldoc.perl.org/Math/BigFloat.html

Eu nunca usei em algo que fosse crítico, mas me parece bem sólida e 
segura.



Em 2012-11-29 18:46, Aureliano Guedes escreveu:

Renato, fiquei sem entender, no meu caso não esta fazendo so um loop?
E qual a diferença entre usar um hash %h ou tranformar $h em um 
hash??

Desculpe as perguntas é que não faço nenhum curso ligado a computação
logo as vezes fico "boiando".

Thiago, segue o script caso tenha também algo a modificar/acrescentar
a nível das minhas péssimas práticas.

use warnings;
use strict;
use Path::Class;

#Guardar os valores em um hash acessado pelo valor do mfe
sub h_energy{
 my $data = shift;
 my $file = file($data)->openr();
 my %hmfe = ();
 my $mirna;
 my $record;

 while (my $linha = <$file>) {
 if ( $linha =~ m{target:.*} ) {
 $record = $linha . $record if ($record);
 $hmfe{$mirna} = $record if ($mirna);
 $mirna = $+{mirna};
 $record = q() if ($record);
 }
 elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
 $mirna = $1;
 $record .= $linha;
 }
 else {
 $record .= $linha;
 }
 }
 return %hmfe;
}

sub termofilter{
 my ($data, $min, $max) = @_;
 my %d = h_energy($data);
 foreach my $keys (keys %d){
 if($keys >= $min and $keys <= $max){
 print $keys . "n";
 }
 }
}
termofilter("hybrid.txt", "-30", "-20");


Date: Thu, 29 Nov 2012 17:27:15 -0200
From: thiagogla...@ticursos.net
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

Onde estou agora o firewall bloqueia o pastebin. Pela sua 
explicação,
verificar por regex seria uma solução segura. O número sera 
convertido

para um string e, se a sua regex prevê uma margem segura para a
imprecisão do ponto flutuante na sua aplicação, funciona sem 
problemas.


Em 2012-11-29 16:59, Aureliano Guedes escreveu:
> Nossa, aqui virou uma arena de ideias, da para aprender muita 
coisa

> so lendo.
>
> O problema é o seguinte, eu tenho uma lista nesse formato:
>
> target: 01010101
> length: 581
> miRNA : hsa-miR-15a
> length: 22
>
> mfe: -24.4 kcal/mol
> p-value: 0.334111
>
> position 244
> target 5' C UCUCCUGUGGUCUCU G U 3'
> CACA GACCA GUGCUGUU
> GUGU UUGGU CACGACGA
> miRNA 3' AAUA U 5'
>
> Conforme este arquivo http://pastebin.com/9v6WFUT7
>
> Eu quero filtrar essa lista de acordo com o valor de mfe.
>
> Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
>
> Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya
>
> Funcionou, o problema era sono. Não percebi que a regex estava
> pegando um espaço.
>
> Quanto a usar reais como chave de hash, se eu tiver dois reais 
iguais

> poderá ser um problema para acessar os valores,
> mas em toda regra existe sua exceção.
>
> No meu caso, o que me importa é que mfe esteja no intervalo
> determinado.
>
> Caso descordem seria uma honra ler a explicação de qualquer um de
> vocês.
>
>> Date: Thu, 29 Nov 2012 16:44:50 -0200
>> From: thiagogla...@ticursos.net
>> To: rio-pm@pm.org
>> Subject: Re: [Rio-pm] Chaves de hash
>>
>> Um exemplo mais preciso:
>>
>> $ uname -a
>> SunOS cg01spo 5.10 Generic_13-03 sun4v sparc
>> SUNW,SPARC-Enterprise-T5120
>>
>> $ perl -E '
>> if (0.2 > 0.19997){
>> say "0.2 is greater than 0.19997";}
>> else {
>> say "Floating Point is not true real"};'
>> 0.2 is greater than 0.19997
>> $
>>
>> $ perl -E '
>> if (0.2 > 0.19998){
>> say "0.2 is greater than 0.19998";}
>> else {
>> say "Floating Point is not true real"};'
>> Floating Point is not true real
>> $
>>
>> Por que é importante saber essas coisas?
>> http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html
>>
>>
>>
>>
>>
>>
>> Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:
>> >> Não se compara reais por igualdade.
>> > Se você tem erro na igualdade, t

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
eu prefiro geralmente multiplicar por 1+N casas e usar apenas o numero
inteiro,

se a quantidade de casas for pequena, *é mais rapido* do que ligar uma lib
externa pra processar numeros.

ps: teoricamente é mais rapido, não fiz testes para tal

2012/11/29 

> Seu primeiro erro é o operador and. No documento perlop: $ perldoc perlop
> você vai descobrir o seguinte:
>
>  " Logical And
>  Binary "and" returns the logical conjunction of the two
>  surrounding expressions.  It's equivalent to && except for
>  the very low precedence.  This means that it short-circuits:
>  i.e., the right expression is evaluated only if the left
>  expression is true.
> [...]
>   C-style Logical And
>  Binary "&&" performs a short-circuit logical AND operation.
>  That is, if the left operand is false, the right operand is
>  not even evaluated.  Scalar or list context propagates down
>  to the right operand if it is evaluated."
>
> Logo, seu código
>
>
> if($keys >= $min and $keys <= $max){
>
> deveria ser if($keys >= $min && $keys <= $max){
>
> A segunda coisa é o seu range. Não sei a precisão que seu código precisa.
> Veja isso:
>
>  $ perl -E '
> if (-30.1 >= -30 ){
> say "-30.1 is equal -30? Really";}
>
> else {
> say "Floating Point is not true real"};'
> -30.1 is equal -30? Really
>  $
>
>
> Eu faria algo como:
>
> if($keys > $min and $keys < $max)
>
> e, usaria, por exemplo -30.01 como min e -20.01 como max, por
> exemplo, para contornar o ponto flutuante, ou usaria um módulo matemático,
> como o Math::BigFloat.
>
> http://perldoc.perl.org/Math/**BigFloat.html
>
> Eu nunca usei em algo que fosse crítico, mas me parece bem sólida e segura.
>
>
> Em 2012-11-29 18:46, Aureliano Guedes escreveu:
>
>> Renato, fiquei sem entender, no meu caso não esta fazendo so um loop?
>> E qual a diferença entre usar um hash %h ou tranformar $h em um hash??
>> Desculpe as perguntas é que não faço nenhum curso ligado a computação
>> logo as vezes fico "boiando".
>>
>> Thiago, segue o script caso tenha também algo a modificar/acrescentar
>> a nível das minhas péssimas práticas.
>>
>> use warnings;
>> use strict;
>> use Path::Class;
>>
>> #Guardar os valores em um hash acessado pelo valor do mfe
>> sub h_energy{
>>  my $data = shift;
>>  my $file = file($data)->openr();
>>  my %hmfe = ();
>>  my $mirna;
>>  my $record;
>>
>>  while (my $linha = <$file>) {
>>  if ( $linha =~ m{target:.*} ) {
>>  $record = $linha . $record if ($record);
>>  $hmfe{$mirna} = $record if ($mirna);
>>  $mirna = $+{mirna};
>>  $record = q() if ($record);
>>  }
>>  elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
>>
>>  $mirna = $1;
>>  $record .= $linha;
>>  }
>>  else {
>>  $record .= $linha;
>>  }
>>  }
>>  return %hmfe;
>> }
>>
>> sub termofilter{
>>  my ($data, $min, $max) = @_;
>>  my %d = h_energy($data);
>>  foreach my $keys (keys %d){
>>  if($keys >= $min and $keys <= $max){
>>  print $keys . "n";
>>  }
>>  }
>> }
>> termofilter("hybrid.txt", "-30", "-20");
>>
>>  Date: Thu, 29 Nov 2012 17:27:15 -0200
>>> From: thiagogla...@ticursos.net
>>> To: rio-pm@pm.org
>>> Subject: Re: [Rio-pm] Chaves de hash
>>>
>>> Onde estou agora o firewall bloqueia o pastebin. Pela sua explicação,
>>> verificar por regex seria uma solução segura. O número sera convertido
>>> para um string e, se a sua regex prevê uma margem segura para a
>>> imprecisão do ponto flutuante na sua aplicação, funciona sem problemas.
>>>
>>> Em 2012-11-29 16:59, Aureliano Guedes escreveu:
>>> > Nossa, aqui virou uma arena de ideias, da para aprender muita coisa
>>> > so lendo.
>>> >
>>> > O problema é o seguinte, eu tenho uma lista nesse formato:
>>> >
>>> > target: 01010101
>>> > length: 581
>>> > miRNA : hsa-miR-15a
>>> > length: 22
>>> >
>>> > mfe: -24.4 kcal/mol
>>> > p-value: 0.334111
>>> >
>>> > position 244
>>> > target 5' C UCUCCUGUGGUCUCU G U 3'
>>> > CACA GACCA GUGCUGUU
>>> > GUGU UUGGU CACGACGA
>>> > miRNA 3' AAUA U 5'
>>> >
>>> > Conforme este arquivo http://pastebin.com/9v6WFUT7
>>> >
>>> > Eu quero filtrar essa lista de acordo com o valor de mfe.
>>> >
>>> > Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
>>> >
>>> > Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya
>>> >
>>> > Funcionou, o problema era sono. Não percebi que a regex estava
>>> > pegando um espaço.
>>> >
>>> > Quanto a usar reais como chave de hash, se eu tiver dois reais iguais
>>> > poderá ser um problema para acessar os valores,
>>> > mas em toda regra existe sua exceção.
>>> >
>>> > No meu caso, o que me importa é que mfe esteja no intervalo
>>> > determinado.
>>> >
>>> > Caso descordem seria uma honra ler a explicação de qualquer um de
>>> > vocês.
>>> >
>>> >> Date: Thu, 29 Nov 2012 16:44:50 -0200
>>> >> From: thiagogla...@ticursos.net
>>> >> To: rio-pm@pm.org
>>> >> Subject: Re: [Rio-pm] Chaves de hash
>>> >>
>>> >> Um exemplo mais preciso:
>>> >>
>>> >> $ uname -a
>>>

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread thiagoglauco

Só para ser chato:


popular um hash inteiro já com os grupos montados,


popular
adj. 2 g.
1. Relativo ou pertencente ao povo.
2. Que é usado ou comum entre o povo.
3. Que é do agrado do povo.
4. Vulgar, notório.
5. Democrático.
s. m.
6. Homem do povo.

povoar - Conjugar
(povo + -oar)
v. tr.
1. Fundar povoações em.
2. Estabelecer habitantes em.
3. Disseminar animais para reprodução.
4. Dispor grande quantidade de árvores em.
5. Dispor grande quantidade de plantas (ex.: povoar o terreno de 
vinha).


6. [Por extensão]  Encher com determinada coisa (ex.: a notícia 
povoou a sua vida com alegria).


v. pron.
7. Encher-se de habitantes.


Em 2012-11-29 19:41, Renato Santos escreveu:

Assim,
não sei se tem muita diferença na memoria entre um $h e um %s, 

eu costumo usar $h por habito mesmo, mas poderia ser push
@{$h{$grupo}} sem problemas, talvez até @$h{$grupo} funcione certo

O 'evitar o loop' q eu digo, é você popular um hash inteiro já com os
grupos montados, por exemplo ,se o grupo for a cada 10 numeros reais,
voce poderia retornar
"-30:-20" como chave para todos os valores de entrada dessa funcao, e
popular tudo de uma vez só, no lugar de ler as chaves a cada pergunta
de intervalo

2012/11/29 Aureliano Guedes 

Renato, fiquei sem entender, no meu caso não esta fazendo so um 
loop? E qual a diferença entre usar um hash %h ou tranformar $h em um 
hash??
Desculpe as perguntas é que não faço nenhum curso ligado a 
computação logo as vezes fico "boiando".


Thiago, segue o script caso tenha também algo a 
modificar/acrescentar a nível das minhas péssimas práticas.


use warnings;
use strict;
use Path::Class;

#Guardar os valores em um hash acessado pelo valor do mfe
sub h_energy{       
    my $data = shift;
    my $file = file($data)->openr();
    my %hmfe = ();       
    my $mirna;
    my $record;
   
    while (my $linha = <$file>) {
        if ( $linha =~ m{target:.*} ) {
            $record = $linha . $record if ($record);
            $hmfe{$mirna} = $record if ($mirna);
            $mirna = $+{mirna};
            $record = q() if ($record);
        }
        elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
            $mirna = $1;
            $record .= $linha;
        }
         else {
            $record .= $linha;
         }
    }
    return %hmfe;
}

sub termofilter{
    my ($data, $min, $max) = @_;
    my %d = h_energy($data);

    foreach my $keys (keys %d){
        if($keys >= $min and $keys <= $max){
            print $keys . "n";
        }
    }
}
termofilter("hybrid.txt", "-30", "-20");


Date: Thu, 29 Nov 2012 17:27:15 -0200



From: thiagogla...@ticursos.net
To: rio-pm@pm.org

> Subject: Re: [Rio-pm] Chaves de hash


Onde estou agora o firewall bloqueia o pastebin. Pela sua 
explicação,
verificar por regex seria uma solução segura. O número sera 
convertido

para um string e, se a sua regex prevê uma margem segura para a
> imprecisão do ponto flutuante na sua aplicação, funciona sem 
problemas.


Em 2012-11-29 16:59, Aureliano Guedes escreveu:
> Nossa, aqui virou uma arena de ideias, da para aprender muita 
coisa

> > so lendo.

>
> O problema é o seguinte, eu tenho uma lista nesse formato:
>
> target: 01010101
> length: 581
> miRNA : hsa-miR-15a
> length: 22

> >

> mfe: -24.4 kcal/mol
> p-value: 0.334111
>
> position 244
> target 5' C UCUCCUGUGGUCUCU G U 3'
> CACA GACCA GUGCUGUU
> GUGU UUGGU CACGACGA

> > miRNA 3' AAUA U 5'

>
> Conforme este arquivo http://pastebin.com/9v6WFUT7 [1]
>
> Eu quero filtrar essa lista de acordo com o valor de mfe.

> >

> Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
>
> Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya [2]

> >

> Funcionou, o problema era sono. Não percebi que a regex estava
> pegando um espaço.
>
> Quanto a usar reais como chave de hash, se eu tiver dois reais 
iguais

> poderá ser um problema para acessar os valores,

> > mas em toda regra existe sua exceção.

>
> No meu caso, o que me importa é que mfe esteja no intervalo
> determinado.
>
> Caso descordem seria uma honra ler a explicação de qualquer um de

> > vocês.

>
>> Date: Thu, 29 Nov 2012 16:44:50 -0200
>> From: thiagogla...@ticursos.net
>> To: rio-pm@pm.org

> >> Subject: Re: [Rio-pm] Chaves de hash

>>
>> Um exemplo mais preciso:
>>
>> $ uname -a
>> SunOS cg01spo 5.10 Generic_13-03 sun4v sparc

> >> SUNW,SPARC-Enterprise-T5120

>>
>> $ perl -E '
>> if (0.2 > 0.19997){
>> say "0.2 is greater than 0.19997";}

> >> else {

>> say "Floating Point is not true real"};'
>> 0.2 is greater than 0.19997
>> $
>>
>> $ perl -E '

> >> if (0.2 > 0.19998){

>> say "0.2 is greater than 0.19998";}
>> else {
>> say "Floating Point is not true real"};'

> >> Floating Point is not true real

>> $
>>
>> Por que é importante saber essas coisas?
>> http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html [3]

> >>

>>
>>
>>
>>
>>
>> Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:

> >> >> Não se compara reais 

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Aureliano Guedes

So aproveitando a oportunidade.

Estou brincando com brinquedinhos novos.
Mas ainda não entendi uma coisa.

Aqui eu quero escrever na tela so o que for documento, não quero o que for 
diretorio.
Na unha eu sei fazer, eu quero fazer isso usando o modulo Path::Class.

Abaixo não esta dando muito certo.
O que errei??

use Path::Class;

 
my $dir  = dir('Parse');

my $s = $dir->open or die "cant open: $!";

my @o = $s->read;

foreach my $p (@o){

if ($p->file){

print $p;

}

}

> Date: Thu, 29 Nov 2012 19:52:45 -0200
> From: thiagogla...@ticursos.net
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Chaves de hash
> 
> Só para ser chato:
> 
> > popular um hash inteiro já com os grupos montados,
> 
> popular
> adj. 2 g.
> 1. Relativo ou pertencente ao povo.
> 2. Que é usado ou comum entre o povo.
> 3. Que é do agrado do povo.
> 4. Vulgar, notório.
> 5. Democrático.
> s. m.
> 6. Homem do povo.
> 
> povoar - Conjugar
> (povo + -oar)
> v. tr.
> 1. Fundar povoações em.
> 2. Estabelecer habitantes em.
> 3. Disseminar animais para reprodução.
> 4. Dispor grande quantidade de árvores em.
> 5. Dispor grande quantidade de plantas (ex.: povoar o terreno de 
> vinha).
> 
> >>>6. [Por extensão]  Encher com determinada coisa (ex.: a notícia 
> >>> povoou a sua vida com alegria).
> 
> v. pron.
> 7. Encher-se de habitantes.
> 
> 
> Em 2012-11-29 19:41, Renato Santos escreveu:
> > Assim,
> > não sei se tem muita diferença na memoria entre um $h e um %s, 
> >
> > eu costumo usar $h por habito mesmo, mas poderia ser push
> > @{$h{$grupo}} sem problemas, talvez até @$h{$grupo} funcione certo
> >
> > O 'evitar o loop' q eu digo, é você popular um hash inteiro já com os
> > grupos montados, por exemplo ,se o grupo for a cada 10 numeros reais,
> > voce poderia retornar
> > "-30:-20" como chave para todos os valores de entrada dessa funcao, e
> > popular tudo de uma vez só, no lugar de ler as chaves a cada pergunta
> > de intervalo
> >
> > 2012/11/29 Aureliano Guedes 
> >
> >> Renato, fiquei sem entender, no meu caso não esta fazendo so um 
> >> loop? E qual a diferença entre usar um hash %h ou tranformar $h em um 
> >> hash??
> >> Desculpe as perguntas é que não faço nenhum curso ligado a 
> >> computação logo as vezes fico "boiando".
> >>
> >> Thiago, segue o script caso tenha também algo a 
> >> modificar/acrescentar a nível das minhas péssimas práticas.
> >>
> >> use warnings;
> >> use strict;
> >> use Path::Class;
> >>
> >> #Guardar os valores em um hash acessado pelo valor do mfe
> >> sub h_energy{   
> >> my $data = shift;
> >> my $file = file($data)->openr();
> >> my %hmfe = ();   
> >> my $mirna;
> >> my $record;
> >>
> >> while (my $linha = <$file>) {
> >> if ( $linha =~ m{target:.*} ) {
> >> $record = $linha . $record if ($record);
> >> $hmfe{$mirna} = $record if ($mirna);
> >> $mirna = $+{mirna};
> >> $record = q() if ($record);
> >> }
> >> elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
> >> $mirna = $1;
> >> $record .= $linha;
> >> }
> >>  else {
> >> $record .= $linha;
> >>  }
> >> }
> >> return %hmfe;
> >> }
> >>
> >> sub termofilter{
> >> my ($data, $min, $max) = @_;
> >> my %d = h_energy($data);
> >>
> >> foreach my $keys (keys %d){
> >> if($keys >= $min and $keys <= $max){
> >> print $keys . "n";
> >> }
> >> }
> >> }
> >> termofilter("hybrid.txt", "-30", "-20");
> >>
> >>> Date: Thu, 29 Nov 2012 17:27:15 -0200
> >>
> >>> From: thiagogla...@ticursos.net
> >>> To: rio-pm@pm.org
> >> > Subject: Re: [Rio-pm] Chaves de hash
> >>>
> >>> Onde estou agora o firewall bloqueia o pastebin. Pela sua 
> >>> explicação,
> >>> verificar por regex seria uma solução segura. O número sera 
> >>> convertido
> >>> para um string e, se a sua regex prevê uma margem segura para a
> >> > imprecisão do ponto flutuante na sua aplicação, funciona sem 
> >> problemas.
> >>>
> >>> Em 2012-11-29 16:59, Aureliano Guedes escreveu:
> >>> > Nossa, aqui virou uma arena de ideias, da para aprender muita 
> >>> coisa
> >> > > so lendo.
> >>> >
> >>> > O problema é o seguinte, eu tenho uma lista nesse formato:
> >>> >
> >>> > target: 01010101
> >>> > length: 581
> >>> > miRNA : hsa-miR-15a
> >>> > length: 22
> >> > >
> >>> > mfe: -24.4 kcal/mol
> >>> > p-value: 0.334111
> >>> >
> >>> > position 244
> >>> > target 5' C UCUCCUGUGGUCUCU G U 3'
> >>> > CACA GACCA GUGCUGUU
> >>> > GUGU UUGGU CACGACGA
> >> > > miRNA 3' AAUA U 5'
> >>> >
> >>> > Conforme este arquivo http://pastebin.com/9v6WFUT7 [1]
> >>> >
> >>> > Eu quero filtrar essa lista de acordo com o valor de mfe.
> >> > >
> >>> > Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
> >>> >
> >>> > Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya [2]
> >> > >
> >>> > Funcionou, o problema era sono. Não percebi que a regex estava
> >>> > pegando um espaço.
> >>>

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
http://perldoc.perl.org/functions/-X.html

procure por -d e por -e e por  leia tudo!

2012/11/29 Aureliano Guedes 

>  So aproveitando a oportunidade.
>
> Estou brincando com brinquedinhos novos.
> Mas ainda não entendi uma coisa.
>
> Aqui eu quero escrever na tela so o que for documento, não quero o que for
> diretorio.
> Na unha eu sei fazer, eu quero fazer isso usando o modulo Path::Class.
>
> Abaixo não esta dando muito certo.
> O que errei??
>
> use Path::Class;
>
> my $dir  = dir('Parse');
> my $s = $dir->open or die "cant open: $!";
> my @o = $s->read;
> foreach my $p (@o){
> if ($p->file){
> print $p;
> }
> }
>
> > Date: Thu, 29 Nov 2012 19:52:45 -0200
>
> > From: thiagogla...@ticursos.net
> > To: rio-pm@pm.org
> > Subject: Re: [Rio-pm] Chaves de hash
> >
> > Só para ser chato:
> >
> > > popular um hash inteiro já com os grupos montados,
> >
> > popular
> > adj. 2 g.
> > 1. Relativo ou pertencente ao povo.
> > 2. Que é usado ou comum entre o povo.
> > 3. Que é do agrado do povo.
> > 4. Vulgar, notório.
> > 5. Democrático.
> > s. m.
> > 6. Homem do povo.
> >
> > povoar - Conjugar
> > (povo + -oar)
> > v. tr.
> > 1. Fundar povoações em.
> > 2. Estabelecer habitantes em.
> > 3. Disseminar animais para reprodução.
> > 4. Dispor grande quantidade de árvores em.
> > 5. Dispor grande quantidade de plantas (ex.: povoar o terreno de
> > vinha).
> >
> > >>>6. [Por extensão] Encher com determinada coisa (ex.: a notícia
> > >>> povoou a sua vida com alegria).
> >
> > v. pron.
> > 7. Encher-se de habitantes.
> >
> >
> > Em 2012-11-29 19:41, Renato Santos escreveu:
> > > Assim,
> > > não sei se tem muita diferença na memoria entre um $h e um %s,
> > >
> > > eu costumo usar $h por habito mesmo, mas poderia ser push
> > > @{$h{$grupo}} sem problemas, talvez até @$h{$grupo} funcione certo
> > >
> > > O 'evitar o loop' q eu digo, é você popular um hash inteiro já com os
> > > grupos montados, por exemplo ,se o grupo for a cada 10 numeros reais,
> > > voce poderia retornar
> > > "-30:-20" como chave para todos os valores de entrada dessa funcao, e
> > > popular tudo de uma vez só, no lugar de ler as chaves a cada pergunta
> > > de intervalo
> > >
> > > 2012/11/29 Aureliano Guedes 
> > >
> > >> Renato, fiquei sem entender, no meu caso não esta fazendo so um
> > >> loop? E qual a diferença entre usar um hash %h ou tranformar $h em um
> > >> hash??
> > >> Desculpe as perguntas é que não faço nenhum curso ligado a
> > >> computação logo as vezes fico "boiando".
> > >>
> > >> Thiago, segue o script caso tenha também algo a
> > >> modificar/acrescentar a nível das minhas péssimas práticas.
> > >>
> > >> use warnings;
> > >> use strict;
> > >> use Path::Class;
> > >>
> > >> #Guardar os valores em um hash acessado pelo valor do mfe
> > >> sub h_energy{
> > >> my $data = shift;
> > >> my $file = file($data)->openr();
> > >> my %hmfe = ();
> > >> my $mirna;
> > >> my $record;
> > >>
> > >> while (my $linha = <$file>) {
> > >> if ( $linha =~ m{target:.*} ) {
> > >> $record = $linha . $record if ($record);
> > >> $hmfe{$mirna} = $record if ($mirna);
> > >> $mirna = $+{mirna};
> > >> $record = q() if ($record);
> > >> }
> > >> elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
> > >> $mirna = $1;
> > >> $record .= $linha;
> > >> }
> > >>  else {
> > >> $record .= $linha;
> > >>  }
> > >> }
> > >> return %hmfe;
> > >> }
> > >>
> > >> sub termofilter{
> > >> my ($data, $min, $max) = @_;
> > >> my %d = h_energy($data);
> > >>
> > >> foreach my $keys (keys %d){
> > >> if($keys >= $min and $keys <= $max){
> > >> print $keys . "n";
> > >> }
> > >> }
> > >> }
> > >> termofilter("hybrid.txt", "-30", "-20");
> > >>
> > >>> Date: Thu, 29 Nov 2012 17:27:15 -0200
> > >>
> > >>> From: thiagogla...@ticursos.net
> > >>> To: rio-pm@pm.org
> > >> > Subject: Re: [Rio-pm] Chaves de hash
> > >>>
> > >>> Onde estou agora o firewall bloqueia o pastebin. Pela sua
> > >>> explicação,
> > >>> verificar por regex seria uma solução segura. O número sera
> > >>> convertido
> > >>> para um string e, se a sua regex prevê uma margem segura para a
> > >> > imprecisão do ponto flutuante na sua aplicação, funciona sem
> > >> problemas.
> > >>>
> > >>> Em 2012-11-29 16:59, Aureliano Guedes escreveu:
> > >>> > Nossa, aqui virou uma arena de ideias, da para aprender muita
> > >>> coisa
> > >> > > so lendo.
> > >>> >
> > >>> > O problema é o seguinte, eu tenho uma lista nesse formato:
> > >>> >
> > >>> > target: 01010101
> > >>> > length: 581
> > >>> > miRNA : hsa-miR-15a
> > >>> > length: 22
> > >> > >
> > >>> > mfe: -24.4 kcal/mol
> > >>> > p-value: 0.334111
> > >>> >
> > >>> > position 244
> > >>> > target 5' C UCUCCUGUGGUCUCU G U 3'
> > >>> > CACA GACCA GUGCUGUU
> > >>> > GUGU UUGGU CACGACGA
> > >> > > miRNA 3' AAUA U 5'
> > >>> >
> > >>> > Confor

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
kkk curti, boa ideia!

ai quando as começarem a reclamar que o sistema está lento, é só diminuir o
tempo!

2012/11/29 Aureliano Guedes 

> sleep 1;
>



-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron 
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Bruno Buss
2012/11/29 

> Seu primeiro erro é o operador and. No documento perlop: $ perldoc perlop
> você vai descobrir o seguinte:
>
>  " Logical And
>  Binary "and" returns the logical conjunction of the two
>  surrounding expressions.  It's equivalent to && except for
>  the very low precedence.  This means that it short-circuits:
>  i.e., the right expression is evaluated only if the left
>  expression is true.
> [...]
>   C-style Logical And
>  Binary "&&" performs a short-circuit logical AND operation.
>  That is, if the left operand is false, the right operand is
>  not even evaluated.  Scalar or list context propagates down
>  to the right operand if it is evaluated."
>
> Logo, seu código
>
>
> if($keys >= $min and $keys <= $max){
>
> deveria ser if($keys >= $min && $keys <= $max){
>

Eu devo ser muito estúpido... mas alguém que está falando isso (ja é o 3o),
poderia fazer o favor de me explicar porque ele deve usar && no lugar do
'and' e qual diferença isso faz no caso deste if específico? E em quais
situações deve-se usar o 'and' no lugar de &&?

[ ]'s
-- 
Bruno C. Buss
http://www.brunobuss.net
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Tiago Peczenyj
Olha... tinha uma gem pra ruby que adicionava uns "sleeps" no codigo pra
deixar propositalmente lento para demonstrações "enterprise". Afinal se é
rapido, não é sistema web interno corporativo.

2012/11/29 Renato Santos 

> kkk curti, boa ideia!
>
> ai quando as começarem a reclamar que o sistema está lento, é só diminuir
> o tempo!
>
> 2012/11/29 Aureliano Guedes 
>
>> sleep 1;
>>
>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron 
>
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
use && sempre e seja feliz, só use and quando você souber oque está fazendo.

o 'and' é praticamente o 'e' da nossa lingua, vc diz pro seu codigo 'faça
isso, e isso', ele não é de comparação, embora faça isso também.

On Thu, Nov 29, 2012 at 10:09 PM, Bruno Buss  wrote:

>
>
> 2012/11/29 
>
> Seu primeiro erro é o operador and. No documento perlop: $ perldoc perlop
>> você vai descobrir o seguinte:
>>
>>  " Logical And
>>  Binary "and" returns the logical conjunction of the two
>>  surrounding expressions.  It's equivalent to && except for
>>  the very low precedence.  This means that it short-circuits:
>>  i.e., the right expression is evaluated only if the left
>>  expression is true.
>> [...]
>>   C-style Logical And
>>  Binary "&&" performs a short-circuit logical AND operation.
>>  That is, if the left operand is false, the right operand is
>>  not even evaluated.  Scalar or list context propagates down
>>  to the right operand if it is evaluated."
>>
>> Logo, seu código
>>
>>
>> if($keys >= $min and $keys <= $max){
>>
>> deveria ser if($keys >= $min && $keys <= $max){
>>
>
> Eu devo ser muito estúpido... mas alguém que está falando isso (ja é o
> 3o), poderia fazer o favor de me explicar porque ele deve usar && no lugar
> do 'and' e qual diferença isso faz no caso deste if específico? E em quais
> situações deve-se usar o 'and' no lugar de &&?
>
> [ ]'s
> --
> Bruno C. Buss
> http://www.brunobuss.net
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron 
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
 pra evitar 'QUANDO EU COMPREI, FUNCIONAVA RAPIDO'

2012/11/29 Tiago Peczenyj 

> Olha... tinha uma gem pra ruby que adicionava uns "sleeps" no codigo pra
> deixar propositalmente lento para demonstrações "enterprise". Afinal se é
> rapido, não é sistema web interno corporativo.
>



-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron 
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Tiago Peczenyj
o or é facil

my $xxx = open (mimimi) or die "ops..";

eu posso usar o and no mesmo contexto.

$self->upload_file_if_necessary($keyname,$file)
 and $self->change_acl_to_public_read($keyname)
and $self->delete_file($file)
 and $self->on_success($file)
or  $self->on_error($file)

ou seja, se o change_acl_to_public_read retornar falso, eu vou executar
on_error


On Thu, Nov 29, 2012 at 10:09 PM, Bruno Buss  wrote:

>
>
> 2012/11/29 
>
> Seu primeiro erro é o operador and. No documento perlop: $ perldoc perlop
>> você vai descobrir o seguinte:
>>
>>  " Logical And
>>  Binary "and" returns the logical conjunction of the two
>>  surrounding expressions.  It's equivalent to && except for
>>  the very low precedence.  This means that it short-circuits:
>>  i.e., the right expression is evaluated only if the left
>>  expression is true.
>> [...]
>>   C-style Logical And
>>  Binary "&&" performs a short-circuit logical AND operation.
>>  That is, if the left operand is false, the right operand is
>>  not even evaluated.  Scalar or list context propagates down
>>  to the right operand if it is evaluated."
>>
>> Logo, seu código
>>
>>
>> if($keys >= $min and $keys <= $max){
>>
>> deveria ser if($keys >= $min && $keys <= $max){
>>
>
> Eu devo ser muito estúpido... mas alguém que está falando isso (ja é o
> 3o), poderia fazer o favor de me explicar porque ele deve usar && no lugar
> do 'and' e qual diferença isso faz no caso deste if específico? E em quais
> situações deve-se usar o 'and' no lugar de &&?
>
> [ ]'s
> --
> Bruno C. Buss
> http://www.brunobuss.net
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Bruno Buss
On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos wrote:

> use && sempre e seja feliz, só use and quando você souber oque está
> fazendo.
>

Desculpe mas vou discordar que um bom conselho seja "use && sempre e seja
feliz", ainda mais seguido de "só use and quando você souber oque está
fazendo". Na melhor da hipóteses são sugestões contraditórias... como
alguém deverá saber quando usar o 'and' se apenas usa o && cegamente?


> o 'and' é praticamente o 'e' da nossa lingua, vc diz pro seu codigo 'faça
> isso, e isso', ele não é de comparação, embora faça
>

"ele não é de comparação, embora faça"? Poderia desenvolver melhor, pois
não fui incapaz de entender o que isso significa para um operador lógico
(que a única diferença do outro é a baixa precedência).


E vou repetir a pergunta aqui, antes que ela fique soterrada pelas tricks
de sleep: Qual diferença isso faz no caso deste if específico do Aureliano?
Por que exatamente, no if dele, utilizar o 'and' está incorreto? Porque no
if dele, somente o && "dá certo" como 3 pessoas já disseram?


-- 
Bruno C. Buss
http://www.brunobuss.net
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Bruno Buss
2012/11/29 Bruno Buss 

> On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos wrote:
>
>> use && sempre e seja feliz, só use and quando você souber oque está
>> fazendo.
>>
>
> Desculpe mas vou discordar que um bom conselho seja "use && sempre e seja
> feliz", ainda mais seguido de "só use and quando você souber oque está
> fazendo". Na melhor da hipóteses são sugestões contraditórias... como
> alguém deverá saber quando usar o 'and' se apenas usa o && cegamente?
>
>
>> o 'and' é praticamente o 'e' da nossa lingua, vc diz pro seu codigo 'faça
>> isso, e isso', ele não é de comparação, embora faça
>>
>
> "ele não é de comparação, embora faça"? Poderia desenvolver melhor, pois
> não fui incapaz de entender o que isso significa para um operador lógico
> (que a única diferença do outro é a baixa precedência).
>

s/incapaz/capaz/;


>
>
> E vou repetir a pergunta aqui, antes que ela fique soterrada pelas tricks
> de sleep: Qual diferença isso faz no caso deste if específico do Aureliano?
> Por que exatamente, no if dele, utilizar o 'and' está incorreto? Porque no
> if dele, somente o && "dá certo" como 3 pessoas já disseram?
>
>
> --
> Bruno C. Buss
> http://www.brunobuss.net
>



-- 
Bruno C. Buss
http://www.brunobuss.net
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Tiago Peczenyj
veja este exemplo:

https://gist.github.com/4172935

veja como a execução das subrotinas não é alterada, mas o resultado das
variaveis é diferente.

my $x = a and b and c and ok or nok;

my $y = a && b && c && ok || nok;

veja que x recebe o valor que a retorna, enquanto y recebe o valor de nok.

isso pq o = esta em termos de precedencia entre o and e o &&



2012/11/29 Bruno Buss 

>
>
> 2012/11/29 Bruno Buss 
>
>> On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos wrote:
>>
>>> use && sempre e seja feliz, só use and quando você souber oque está
>>> fazendo.
>>>
>>
>> Desculpe mas vou discordar que um bom conselho seja "use && sempre e seja
>> feliz", ainda mais seguido de "só use and quando você souber oque está
>> fazendo". Na melhor da hipóteses são sugestões contraditórias... como
>> alguém deverá saber quando usar o 'and' se apenas usa o && cegamente?
>>
>>
>>> o 'and' é praticamente o 'e' da nossa lingua, vc diz pro seu codigo
>>> 'faça isso, e isso', ele não é de comparação, embora faça
>>>
>>
>> "ele não é de comparação, embora faça"? Poderia desenvolver melhor, pois
>> não fui incapaz de entender o que isso significa para um operador lógico
>> (que a única diferença do outro é a baixa precedência).
>>
>
> s/incapaz/capaz/;
>
>
>>
>>
>> E vou repetir a pergunta aqui, antes que ela fique soterrada pelas tricks
>> de sleep: Qual diferença isso faz no caso deste if específico do Aureliano?
>> Por que exatamente, no if dele, utilizar o 'and' está incorreto? Porque no
>> if dele, somente o && "dá certo" como 3 pessoas já disseram?
>>
>>
>> --
>> Bruno C. Buss
>> http://www.brunobuss.net
>>
>
>
>
> --
> Bruno C. Buss
> http://www.brunobuss.net
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Bruno Buss
Sério galera, se eu estou escrevendo outra língua que não seja português
por favor me avisem.

Vou perguntar de novo: por que usar 'and' *no if do Aureliano* está
incorreto como 3 pessoas já disseram?

Eu não quero saber o que acontece quando uso and e && para encadear uma
penca de chamadas de funções e coisas do tipo, pois isso eu já entendi e
teve até o exemplo - super tricky - do Blabos lá em cima.

Novamente, a minha pergunta é relacionada ao fato de 3 pessoas já terem
afirmado que usar 'and' dentro daquele if está incorreto, que o correto
seria utilizar &&.

Pode ser que meu Perl esteja com defeito, mas:
perl -MO=Deparse -E "my $key = 2;if($key >= 1 and $key <= 3){say 'Yay!'}"
e
perl -MO=Deparse -E "my $key = 2;if($key >= 1 && $key <= 3){say 'Yay!'}"

Exibem o mesmo output, a saber:
BEGIN {
$^H{'feature_unicode'} = q(1);
$^H{'feature_say'} = q(1);
$^H{'feature_state'} = q(1);
$^H{'feature_switch'} = q(1);
}
my $key = 2;
if ($key >= 1* and *$key <= 3) {
say 'Yay!';
}
-e syntax OK

Então, se alguém me vier de novo com um exemplo, justificativa,
argumentação que não envolva o bendito and *dentro do if* como no caso do
Aureliano, eu começarei a achar que estamos tendo um problema de
leitura/comunicação por aqui.

[ ]'s

2012/11/29 Tiago Peczenyj 

> veja este exemplo:
>
> https://gist.github.com/4172935
>
> veja como a execução das subrotinas não é alterada, mas o resultado das
> variaveis é diferente.
>
>
>
> my $x = a and b and c and ok or nok;
>
>
>
>
> my $y = a && b && c && ok || nok;
>
>
>
> veja que x recebe o valor que a retorna, enquanto y recebe o valor de nok.
>
> isso pq o = esta em termos de precedencia entre o and e o &&
>
>
>
>
>
> 2012/11/29 Bruno Buss 
>
>>
>>
>> 2012/11/29 Bruno Buss 
>>
>>> On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos 
>>> wrote:
>>>
 use && sempre e seja feliz, só use and quando você souber oque está
 fazendo.

>>>
>>> Desculpe mas vou discordar que um bom conselho seja "use && sempre e
>>> seja feliz", ainda mais seguido de "só use and quando você souber oque está
>>> fazendo". Na melhor da hipóteses são sugestões contraditórias... como
>>> alguém deverá saber quando usar o 'and' se apenas usa o && cegamente?
>>>
>>>
 o 'and' é praticamente o 'e' da nossa lingua, vc diz pro seu codigo
 'faça isso, e isso', ele não é de comparação, embora faça

>>>
>>> "ele não é de comparação, embora faça"? Poderia desenvolver melhor, pois
>>> não fui incapaz de entender o que isso significa para um operador lógico
>>> (que a única diferença do outro é a baixa precedência).
>>>
>>
>> s/incapaz/capaz/;
>>
>>
>>>
>>>
>>> E vou repetir a pergunta aqui, antes que ela fique soterrada pelas
>>> tricks de sleep: Qual diferença isso faz no caso deste if específico do
>>> Aureliano? Por que exatamente, no if dele, utilizar o 'and' está incorreto?
>>> Porque no if dele, somente o && "dá certo" como 3 pessoas já disseram?
>>>
>>>
>>> --
>>> Bruno C. Buss
>>> http://www.brunobuss.net
>>>
>>
>>
>>
>> --
>> Bruno C. Buss
>> http://www.brunobuss.net
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>
>
>
> --
> Tiago B. Peczenyj
> Linux User #405772
>
> http://pacman.blog.br
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Bruno C. Buss
http://www.brunobuss.net
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Blabos de Blebe
Só pra ser muito chato:

>> popular um hash inteiro já com os grupos montados,

http://wiki.mtgsalvation.com/article/Populate

Popular um hash é neologismo de 'populate a hash' que é equivalente a
povoar um hash...

2012/11/29  :
> Só para ser chato:
>
>
>> popular um hash inteiro já com os grupos montados,
>
>
> popular
> adj. 2 g.
> 1. Relativo ou pertencente ao povo.
> 2. Que é usado ou comum entre o povo.
> 3. Que é do agrado do povo.
> 4. Vulgar, notório.
> 5. Democrático.
> s. m.
> 6. Homem do povo.
>
> povoar - Conjugar
> (povo + -oar)
> v. tr.
> 1. Fundar povoações em.
> 2. Estabelecer habitantes em.
> 3. Disseminar animais para reprodução.
> 4. Dispor grande quantidade de árvores em.
> 5. Dispor grande quantidade de plantas (ex.: povoar o terreno de vinha).
>
 6. [Por extensão]  Encher com determinada coisa (ex.: a notícia povoou a
 sua vida com alegria).
>
>
> v. pron.
> 7. Encher-se de habitantes.
>
>
> Em 2012-11-29 19:41, Renato Santos escreveu:
>>
>> Assim,
>> não sei se tem muita diferença na memoria entre um $h e um %s,
>>
>> eu costumo usar $h por habito mesmo, mas poderia ser push
>> @{$h{$grupo}} sem problemas, talvez até @$h{$grupo} funcione certo
>>
>> O 'evitar o loop' q eu digo, é você popular um hash inteiro já com os
>> grupos montados, por exemplo ,se o grupo for a cada 10 numeros reais,
>> voce poderia retornar
>> "-30:-20" como chave para todos os valores de entrada dessa funcao, e
>> popular tudo de uma vez só, no lugar de ler as chaves a cada pergunta
>> de intervalo
>>
>> 2012/11/29 Aureliano Guedes 
>>
>>> Renato, fiquei sem entender, no meu caso não esta fazendo so um loop? E
>>> qual a diferença entre usar um hash %h ou tranformar $h em um hash??
>>> Desculpe as perguntas é que não faço nenhum curso ligado a computação
>>> logo as vezes fico "boiando".
>>>
>>> Thiago, segue o script caso tenha também algo a modificar/acrescentar a
>>> nível das minhas péssimas práticas.
>>>
>>> use warnings;
>>> use strict;
>>> use Path::Class;
>>>
>>> #Guardar os valores em um hash acessado pelo valor do mfe
>>> sub h_energy{
>>> my $data = shift;
>>> my $file = file($data)->openr();
>>> my %hmfe = ();
>>> my $mirna;
>>> my $record;
>>>
>>> while (my $linha = <$file>) {
>>> if ( $linha =~ m{target:.*} ) {
>>> $record = $linha . $record if ($record);
>>> $hmfe{$mirna} = $record if ($mirna);
>>> $mirna = $+{mirna};
>>> $record = q() if ($record);
>>> }
>>> elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
>>>
>>> $mirna = $1;
>>> $record .= $linha;
>>> }
>>>  else {
>>> $record .= $linha;
>>>  }
>>> }
>>> return %hmfe;
>>> }
>>>
>>> sub termofilter{
>>> my ($data, $min, $max) = @_;
>>> my %d = h_energy($data);
>>>
>>> foreach my $keys (keys %d){
>>> if($keys >= $min and $keys <= $max){
>>> print $keys . "n";
>>> }
>>> }
>>> }
>>> termofilter("hybrid.txt", "-30", "-20");
>>>
 Date: Thu, 29 Nov 2012 17:27:15 -0200
>>>
>>>
 From: thiagogla...@ticursos.net
 To: rio-pm@pm.org
>>>
>>> > Subject: Re: [Rio-pm] Chaves de hash


 Onde estou agora o firewall bloqueia o pastebin. Pela sua explicação,
 verificar por regex seria uma solução segura. O número sera convertido
 para um string e, se a sua regex prevê uma margem segura para a
>>>
>>> > imprecisão do ponto flutuante na sua aplicação, funciona sem problemas.


 Em 2012-11-29 16:59, Aureliano Guedes escreveu:
 > Nossa, aqui virou uma arena de ideias, da para aprender muita coisa
>>>
>>> > > so lendo.

 >
 > O problema é o seguinte, eu tenho uma lista nesse formato:
 >
 > target: 01010101
 > length: 581
 > miRNA : hsa-miR-15a
 > length: 22
>>>
>>> > >

 > mfe: -24.4 kcal/mol
 > p-value: 0.334111
 >
 > position 244
 > target 5' C UCUCCUGUGGUCUCU G U 3'
 > CACA GACCA GUGCUGUU
 > GUGU UUGGU CACGACGA
>>>
>>> > > miRNA 3' AAUA U 5'

 >
 > Conforme este arquivo http://pastebin.com/9v6WFUT7 [1]

 >
 > Eu quero filtrar essa lista de acordo com o valor de mfe.
>>>
>>> > >

 > Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
 >
 > Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya [2]
>>>
>>> > >

 > Funcionou, o problema era sono. Não percebi que a regex estava
 > pegando um espaço.
 >
 > Quanto a usar reais como chave de hash, se eu tiver dois reais iguais
 > poderá ser um problema para acessar os valores,
>>>
>>> > > mas em toda regra existe sua exceção.

 >
 > No meu caso, o que me importa é que mfe esteja no intervalo
 > determinado.
 >
 > Caso descordem seria uma honra ler a explicação de qualquer um de
>>>
>>> > > vocês.

 >
 >> Date: Thu, 29 Nov 2012 16:44:50 -0200
 >> From: thiagogla...@ticursos.net
 >> To: 

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Blabos de Blebe
Porra PAC, não pisa fora da faixa, cara! :)

http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity

É só aplicar as regras de precedência.

Parafraseando o perldoc, and é 'equivalent to && except for the very
low precedence'

É óbvio gente. Assim vcs me envergonham!

Game over.

2012/11/29 Tiago Peczenyj :
> veja este exemplo:
>
> https://gist.github.com/4172935
>
> veja como a execução das subrotinas não é alterada, mas o resultado das
> variaveis é diferente.
>
>
>
> my $x = a and b and c and ok or nok;
>
>
>
>
> my $y = a && b && c && ok || nok;
>
>
> veja que x recebe o valor que a retorna, enquanto y recebe o valor de nok.
>
> isso pq o = esta em termos de precedencia entre o and e o &&
>
>
>
>
> 2012/11/29 Bruno Buss 
>>
>>
>>
>> 2012/11/29 Bruno Buss 
>>>
>>> On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos 
>>> wrote:

 use && sempre e seja feliz, só use and quando você souber oque está
 fazendo.
>>>
>>>
>>> Desculpe mas vou discordar que um bom conselho seja "use && sempre e seja
>>> feliz", ainda mais seguido de "só use and quando você souber oque está
>>> fazendo". Na melhor da hipóteses são sugestões contraditórias... como alguém
>>> deverá saber quando usar o 'and' se apenas usa o && cegamente?
>>>

 o 'and' é praticamente o 'e' da nossa lingua, vc diz pro seu codigo
 'faça isso, e isso', ele não é de comparação, embora faça
>>>
>>>
>>> "ele não é de comparação, embora faça"? Poderia desenvolver melhor, pois
>>> não fui incapaz de entender o que isso significa para um operador lógico
>>> (que a única diferença do outro é a baixa precedência).
>>
>>
>> s/incapaz/capaz/;
>>
>>>
>>>
>>>
>>> E vou repetir a pergunta aqui, antes que ela fique soterrada pelas tricks
>>> de sleep: Qual diferença isso faz no caso deste if específico do Aureliano?
>>> Por que exatamente, no if dele, utilizar o 'and' está incorreto? Porque no
>>> if dele, somente o && "dá certo" como 3 pessoas já disseram?
>>>
>>>
>>> --
>>> Bruno C. Buss
>>> http://www.brunobuss.net
>>
>>
>>
>>
>> --
>> Bruno C. Buss
>> http://www.brunobuss.net
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> Tiago B. Peczenyj
> Linux User #405772
>
> http://pacman.blog.br
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Vinícius Miasato
já está chegando em 50 mensagens na thread, quem irá citar ele ?

Em quinta-feira, 29 de novembro de 2012, Blabos de Blebe
escreveu:
> Só pra ser muito chato:
>
>>> popular um hash inteiro já com os grupos montados,
>
> http://wiki.mtgsalvation.com/article/Populate
>
> Popular um hash é neologismo de 'populate a hash' que é equivalente a
> povoar um hash...
>
> 2012/11/29  :
>> Só para ser chato:
>>
>>
>>> popular um hash inteiro já com os grupos montados,
>>
>>
>> popular
>> adj. 2 g.
>> 1. Relativo ou pertencente ao povo.
>> 2. Que é usado ou comum entre o povo.
>> 3. Que é do agrado do povo.
>> 4. Vulgar, notório.
>> 5. Democrático.
>> s. m.
>> 6. Homem do povo.
>>
>> povoar - Conjugar
>> (povo + -oar)
>> v. tr.
>> 1. Fundar povoações em.
>> 2. Estabelecer habitantes em.
>> 3. Disseminar animais para reprodução.
>> 4. Dispor grande quantidade de árvores em.
>> 5. Dispor grande quantidade de plantas (ex.: povoar o terreno de vinha).
>>
> 6. [Por extensão]  Encher com determinada coisa (ex.: a notícia
povoou a
> sua vida com alegria).
>>
>>
>> v. pron.
>> 7. Encher-se de habitantes.
>>
>>
>> Em 2012-11-29 19:41, Renato Santos escreveu:
>>>
>>> Assim,
>>> não sei se tem muita diferença na memoria entre um $h e um %s,
>>>
>>> eu costumo usar $h por habito mesmo, mas poderia ser push
>>> @{$h{$grupo}} sem problemas, talvez até @$h{$grupo} funcione certo
>>>
>>> O 'evitar o loop' q eu digo, é você popular um hash inteiro já com os
>>> grupos montados, por exemplo ,se o grupo for a cada 10 numeros reais,
>>> voce poderia retornar
>>> "-30:-20" como chave para todos os valores de entrada dessa funcao, e
>>> popular tudo de uma vez só, no lugar de ler as chaves a cada pergunta
>>> de intervalo
>>>
>>> 2012/11/29 Aureliano Guedes 
>>>
 Renato, fiquei sem entender, no meu caso não esta fazendo so um loop? E
 qual a diferença entre usar um hash %h ou tranformar $h em um hash??
 Desculpe as perguntas é que não faço nenhum curso ligado a computação
 logo as vezes fico "boiando".

 Thiago, segue o script caso tenha também algo a modificar/acrescentar a
 nível das minhas péssimas práticas.

 use warnings;
 use strict;
 use Path::Class;

 #Guardar os valores em um hash acessado pelo valor do mfe
 sub h_energy{
 my $data = shift;
 my $file = file($data)->openr();
 my %hmfe = ();
 my $mirna;
 my $record;

 while (my $linha = <$file>) {
 if ( $linha =~ m{target:.*} ) {
 $record = $linha . $record if ($record);
 $hmfe{$mirna} = $record if ($mirna);
 $mirna = $+{mirna};
 $record = q() if ($record);
 }
 elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){

 $mirna = $1;
 $record .= $linha;
 }
  else {
 $record .= $linha;
  }
 }
 return %hmfe;
 }

 sub termofilter{
 my ($data, $min, $max) = @_;
 my %d = h_energy($data);

 foreach my $keys (keys %d){
 if($keys >= $min and $keys <= $max){
 print $keys . "n";
 }
 }
 }
 termofilter("hybrid.txt", "-30", "-20");

> Date: Thu, 29 Nov 2012 17:27:15 -0200


> From: thiagogla...@ticursos.net
> To:
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Blabos de Blebe
Só a gente mesmo pra ficar discutindo nota de rodapé de livro :)

2012/11/29 Vinícius Miasato :
> já está chegando em 50 mensagens na thread, quem irá citar ele ?
>
> Em quinta-feira, 29 de novembro de 2012, Blabos de Blebe
> escreveu:
>
>> Só pra ser muito chato:
>>
 popular um hash inteiro já com os grupos montados,
>>
>> http://wiki.mtgsalvation.com/article/Populate
>>
>> Popular um hash é neologismo de 'populate a hash' que é equivalente a
>> povoar um hash...
>>
>> 2012/11/29  :
>>> Só para ser chato:
>>>
>>>
 popular um hash inteiro já com os grupos montados,
>>>
>>>
>>> popular
>>> adj. 2 g.
>>> 1. Relativo ou pertencente ao povo.
>>> 2. Que é usado ou comum entre o povo.
>>> 3. Que é do agrado do povo.
>>> 4. Vulgar, notório.
>>> 5. Democrático.
>>> s. m.
>>> 6. Homem do povo.
>>>
>>> povoar - Conjugar
>>> (povo + -oar)
>>> v. tr.
>>> 1. Fundar povoações em.
>>> 2. Estabelecer habitantes em.
>>> 3. Disseminar animais para reprodução.
>>> 4. Dispor grande quantidade de árvores em.
>>> 5. Dispor grande quantidade de plantas (ex.: povoar o terreno de vinha).
>>>
>> 6. [Por extensão]  Encher com determinada coisa (ex.: a notícia povoou
>> a
>> sua vida com alegria).
>>>
>>>
>>> v. pron.
>>> 7. Encher-se de habitantes.
>>>
>>>
>>> Em 2012-11-29 19:41, Renato Santos escreveu:

 Assim,
 não sei se tem muita diferença na memoria entre um $h e um %s,

 eu costumo usar $h por habito mesmo, mas poderia ser push
 @{$h{$grupo}} sem problemas, talvez até @$h{$grupo} funcione certo

 O 'evitar o loop' q eu digo, é você popular um hash inteiro já com os
 grupos montados, por exemplo ,se o grupo for a cada 10 numeros reais,
 voce poderia retornar
 "-30:-20" como chave para todos os valores de entrada dessa funcao, e
 popular tudo de uma vez só, no lugar de ler as chaves a cada pergunta
 de intervalo

 2012/11/29 Aureliano Guedes 

> Renato, fiquei sem entender, no meu caso não esta fazendo so um loop? E
> qual a diferença entre usar um hash %h ou tranformar $h em um hash??
> Desculpe as perguntas é que não faço nenhum curso ligado a computação
> logo as vezes fico "boiando".
>
> Thiago, segue o script caso tenha também algo a modificar/acrescentar a
> nível das minhas péssimas práticas.
>
> use warnings;
> use strict;
> use Path::Class;
>
> #Guardar os valores em um hash acessado pelo valor do mfe
> sub h_energy{
> my $data = shift;
> my $file = file($data)->openr();
> my %hmfe = ();
> my $mirna;
> my $record;
>
> while (my $linha = <$file>) {
> if ( $linha =~ m{target:.*} ) {
> $record = $linha . $record if ($record);
> $hmfe{$mirna} = $record if ($mirna);
> $mirna = $+{mirna};
> $record = q() if ($record);
> }
> elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
>
> $mirna = $1;
> $record .= $linha;
> }
>  else {
> $record .= $linha;
>  }
> }
> return %hmfe;
> }
>
> sub termofilter{
> my ($data, $min, $max) = @_;
> my %d = h_energy($data);
>
> foreach my $keys (keys %d){
> if($keys >= $min and $keys <= $max){
> print $keys . "n";
> }
> }
> }
> termofilter("hybrid.txt", "-30", "-20");
>
>> Date: Thu, 29 Nov 2012 17:27:15 -0200
>
>
>> From: thiagogla...@ticursos.net
>> To:
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Blabos de Blebe
Um exemplo hipotético...

Suponha que não haja escapatória e tenha-se que comparar flutuantes...

if ( float_equal( $a, $b ) ) {
say 'igual';
}
elsif ( $a < $b && !float_equal( $a, $b ) ) {
say 'menor';
}
else {
say 'maior';
}

Será que funciona?

2012/11/29  :
> Um exemplo mais preciso:
>
> $ uname -a
> SunOS cg01spo 5.10 Generic_13-03 sun4v sparc SUNW,SPARC-Enterprise-T5120
>
> $ perl -E '
> if (0.2 > 0.19997){
> say "0.2 is greater than 0.19997";}
>
> else {
> say "Floating Point is not true real"};'
> 0.2 is greater than 0.19997
> $
>
> $ perl -E '
> if (0.2 > 0.19998){
> say "0.2 is greater than 0.19998";}
>
> else {
> say "Floating Point is not true real"};'
> Floating Point is not true real
> $
>
> Por que é importante saber essas coisas?
> http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html
>
>
>
>
>
>
> Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:
>
>>> Não se compara reais por igualdade.
>>
>> Se você tem erro na igualdade, terá nas outras comparações se a
>> diferença entre os números for menor que o maior acréscimo suportado
>> pela plataforma:
>>
>> $ perl -E '
>> if (0.2 > 0.1999){
>>>
>>> say "0.2 is greater than 0.19";}
>>> else {
>>> say "Floating Point is not true real"};'
>>
>> Floating Point is not true real
>> $
>>
>> $ perl -E '
>> if (0.2 > 0.19){
>> say "0.2 is greater than 0.19";}
>> else {
>> say "Floating Point is not true real"};'
>> 0.2 is greater than 0.19
>> $
>>
>> Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
>> maio, nem menor.
>>
>> E mais: garanto que se você quer usar um número real como chave de
>> Hash você tem um problema na análise da lógica do problema que está
>> enfrentando e como solucioná-lo.
>>
>>
>> Em 2012-11-29 10:36, Blabos de Blebe escreveu:
>>>
>>> Na verdade é o contrário, não?
>>>
>>> Não se compara reais por igualdade.
>>>
>>> Se você usa reais como chaves de hash, você tem algum problema...
>>>
>>> Ao não controlar a representação interna em ponto flutuante, você pode
>>> nunca mais alcançar o valor relacionado à chave, se usar um número
>>> real como chave, pois qualquer bit diferente, mesmo que arredondando
>>> no mesmo número vai resultar num cálculo diferente na tabela hash.
>>>
>>> Igualdade entre númros reais constuma ser definida como algo assim:
>>>
>>> sub float_equal {
>>> my ($first, $second) = @_;
>>> my $threshold = 0.0001 # arbitrário
>>> return abs( $first - $second ) < $threshold;
>>> }
>>>
>>> Converter para string antes de usar como chave de hash também não me
>>> parece saudável, pois, embora a string vá funcionar bem no hash, você
>>> não garante que a conversão vai resultar sempre na mesma string, e aí
>>> vc se ferra do mesmo jeito.
>>>
>>> Por outro lado, se você nunca vai acessar o elemento do hash através
>>> da chave, um foreach por keys() ou values() vai te retornar os
>>> valores...
>>>
>>> Mas aí eu te perguntaria por que rails você está usando hash pra isso...
>>>
>>>
>>>
>>> On Thu, Nov 29, 2012 at 6:47 AM,   wrote:

 Existe um problema aqui, diferente da comparação.
 A comparação de reais é problemática devido a estrutura interna do ponto
 flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do Perl,
 mas
 das regras de aproximação usada pelos processadores.

 Rounding rules

 The standard defines five rounding rules. The first two round to a
 nearest
 value; the others are called directed roundings:
 Roundings to nearest

 Round to nearest, ties to even – rounds to the nearest value; if the
 number falls midway it is rounded to the nearest value with an even
 (zero)
 least significant bit, which occurs 50% of the time; this is the default
 for
 binary floating-point and the recommended default for decimal.
 Round to nearest, ties away from zero – rounds to the nearest value;
 if
 the number falls midway it is rounded to the nearest value above (for
 positive numbers) or below (for negative numbers); this is intended as
 an
 option for decimal floating point.

 Directed roundings

 Round toward 0 – directed rounding towards zero (also known as
 truncation).
 Round toward +∞ – directed rounding towards positive infinity (also
 known as rounding up or ceiling).
 Round toward −∞ – directed rounding towards negative infinity (also
 known as rounding down or floor).

 Se a comparação for inevitável, converta o seu número para string e
 compare
 ou determine um nível de precisão aceitável e faça bit a bit.

 Em 2012-11-28 21:42, Aureliano Guedes escreveu:
>
>
> Ola Monges.
>
> Estou com um problema simples mas que não acho a solução.
>
> Eu tenho um hash onde as chaves são valores numericos rea

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
#define float_epsilon 0.1;#define float_equal(a,b) (fabs((a) -
(b)) < float_epsilon)

*BTW*

2012/11/29 Blabos de Blebe 

> float_equal




-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron 
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Marcio Ferreira
47
On Nov 29, 2012 11:35 PM, "Renato Santos"  wrote:

>
> #define float_epsilon 0.1;#define float_equal(a,b) (fabs((a) - (b)) < 
> float_epsilon)
>
> *BTW*
>
> 2012/11/29 Blabos de Blebe 
>
>> float_equal
>
>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron 
>
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Leo Balter
Quero participar dessa discussao antes do 50.

Por que tanta peculiariade na dicotomia  de popular?

Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao minha?


Leo Balter - via mobile

Em 30/11/2012, às 00:02, Marcio Ferreira  
escreveu:

> 47
> 
> On Nov 29, 2012 11:35 PM, "Renato Santos"  wrote:
>> 
>> 
>> #define float_epsilon 0.1;
>> #define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)
>> BTW
>> 
>> 2012/11/29 Blabos de Blebe 
>>> float_equal
>> 
>> 
>> 
>> -- 
>> Saravá,
>> Renato CRON
>> http://www.renatocron.com/blog/
>> @renato_cron
>> 
>> 
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Aureliano Guedes

Bruno, no meu if funcionou tanto com && quanto com and. O meu erro mesmo foi 
que a regex pegava um espasso.

Bem a minha duvida ficou em "porque seria problematico colocar reais em chaves 
de hash no meu caso?"

Se eu fosse pesquisar um valor especifico e tivesse duas ou mais chaves com o 
mesmo valor real seria problema
mas no meu caso umporta que o valor esteja em um determinado intervalo, podem 
ter 20 chaves iguais, estando no intervalo
eu quero os 20 valores. 49??

From: leonardo.bal...@gmail.com
Date: Fri, 30 Nov 2012 00:15:50 -0200
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

Quero participar dessa discussao antes do 50.
Por que tanta peculiariade na dicotomia  de popular?
Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao minha?

Leo Balter - via mobile
Em 30/11/2012, às 00:02, Marcio Ferreira  
escreveu:

47
On Nov 29, 2012 11:35 PM, "Renato Santos"  wrote:


#define float_epsilon 0.1;
#define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)


BTW
2012/11/29 Blabos de Blebe 



float_equal

-- 
Saravá,


Renato CRONhttp://www.renatocron.com/blog/


@renato_cron



___

Rio-pm mailing list

Rio-pm@pm.org

http://mail.pm.org/mailman/listinfo/rio-pm

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm  
  ___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Stanislaw Pusep
Todos sabem que a WWII foi desencadeada por causa da festa de aniversário
de 50 anos de Hitler.

ABS()



2012/11/30 Aureliano Guedes 

>  Bruno, no meu if funcionou tanto com && quanto com and. O meu erro mesmo
> foi que a regex pegava um espasso.
>
> Bem a minha duvida ficou em "porque seria problematico colocar reais em
> chaves de hash no meu caso?"
>
> Se eu fosse pesquisar um valor especifico e tivesse duas ou mais chaves
> com o mesmo valor real seria problema
> mas no meu caso umporta que o valor esteja em um determinado intervalo,
> podem ter 20 chaves iguais, estando no intervalo
> eu quero os 20 valores. 49??
>
> --
> From: leonardo.bal...@gmail.com
> Date: Fri, 30 Nov 2012 00:15:50 -0200
>
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Chaves de hash
>
> Quero participar dessa discussao antes do 50.
>
> Por que tanta peculiariade na dicotomia  de popular?
>
> Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao minha?
>
>
> Leo Balter - via mobile
>
> Em 30/11/2012, às 00:02, Marcio Ferreira 
> escreveu:
>
> 47
> On Nov 29, 2012 11:35 PM, "Renato Santos"  wrote:
>
> #define float_epsilon 0.1;#define float_equal(a,b) (fabs((a) - (b)) < 
> float_epsilon)
>
> *BTW*
>
> 2012/11/29 Blabos de Blebe 
>
> float_equal
>
>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron 
>
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
> ___ Rio-pm mailing list
> Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
pronto, na 51 eu respondo!

2012/11/30 Aureliano Guedes 

>  Bruno, no meu if funcionou tanto com && quanto com and. O meu erro mesmo
> foi que a regex pegava um espasso.
>
 pois é, vai funcionar!
#no more comments

> Bem a minha duvida ficou em "porque seria problematico colocar reais em
> chaves de hash no meu caso?"
>
tenho quase certeza que, como já foi removido de um texto, o numero real em
questão, seja apenas um scalar, sem a flag de 'real' (se é existe essa flag
internamente),

portanto, você pode colocar qualquer coisa nas chaves de um hash sem
problema

(to em duvida se existe algum byte especial que é usado para separar as
chaves internamente, esse valor fica em uma das variaveis magicas)


>
> Se eu fosse pesquisar um valor especifico e tivesse duas ou mais chaves
> com o mesmo valor real seria problema
>
você tem que pesquisar exatamente o valor desejado, mas não tem problema
pois você esta percorrendo todas as chaves

> mas no meu caso *i*mporta que o valor estej*e *em um determinado
> intervalo, podem ter 20 chaves iguais, estando no intervalo
> eu quero os 20 valores. 49??
>
que? 20 chaves iguais não pode!


voltando a que eu respondi no email via celular, eu faria o codigo de outra
forma,
se for possivel e os intervalos forem já predetermindados:
no lugar de
$hmfe{$mirna} = $record if ($mirna);
eu já montaria ( fill, populate, do the inserts ) o hash com as chaves já
sendo o intervalo, calculado por uma funcao (que eu chameria de filtro)

push(@{$hmfe{determina_intervalo($mirna)}, $record} if ($mirna);

$truncate = 1000; # isso transforma -0.123456789 em -0.123 e desconsidera o
que estiver na frente do 3. o round-up transformaria em 0.12*4*
*
*
sub determina_intervalo {
my $valor = shift;
# isso so faz o truncate
$valor = int ($valor * $truncate) / $truncate;

# depois separa em grupos de 200:
$valor *= 1000;
return int($valor/200)*200; # isso retorna só '200' que ja vale, mas
poderia ser tambem:

my $tmp = int($valor/200)*200;
retrun "$tmp:".$tmp+200 # que vai retornar '-400:-200' que
}

e assim o valor da chave do intervalo já contem todos os registros daquele
intervalo, nem de if precisa!

perl -E 'sub a{my $x = shift() * 1000; $x = int($x/200)*200; $x}; say a
-0.12; say a -0.23; say a -0.25; say a -0.26; say a -5; say a -0.29; say a
-0.5; say a -0.71'
0
-200
-200
-200
-5000
-200
-400
-600



> --
> From: leonardo.bal...@gmail.com
> Date: Fri, 30 Nov 2012 00:15:50 -0200
>
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Chaves de hash
>
> Quero participar dessa discussao antes do 50.
>
> Por que tanta peculiariade na dicotomia  de popular?
>
> Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao minha?
>
>
> Leo Balter - via mobile
>
> Em 30/11/2012, às 00:02, Marcio Ferreira 
> escreveu:
>
> 47
> On Nov 29, 2012 11:35 PM, "Renato Santos"  wrote:
>
> #define float_epsilon 0.1;#define float_equal(a,b) (fabs((a) - (b)) < 
> float_epsilon)
>
> *BTW*
>
> 2012/11/29 Blabos de Blebe 
>
> float_equal
>
>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron 
>
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
> ___ Rio-pm mailing list
> Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron 
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
obs:

 perl -E 'sub a{my $x = shift() * 1000; $x = int($x/200)*200; $x}; say a
-0.7; say a -0.8'
-600
-800

como esta arredondando via truncate, o 79 geralmente deveria
estar no grupo do 800, OU NÃO! você que decide isso


2012/11/30 Renato Santos 

> pronto, na 51 eu respondo!
>
> 2012/11/30 Aureliano Guedes 
>
>>  Bruno, no meu if funcionou tanto com && quanto com and. O meu erro mesmo
>> foi que a regex pegava um espasso.
>>
>  pois é, vai funcionar!
> #no more comments
>
>> Bem a minha duvida ficou em "porque seria problematico colocar reais em
>> chaves de hash no meu caso?"
>>
> tenho quase certeza que, como já foi removido de um texto, o numero real
> em questão, seja apenas um scalar, sem a flag de 'real' (se é existe essa
> flag internamente),
>
> portanto, você pode colocar qualquer coisa nas chaves de um hash sem
> problema
>
> (to em duvida se existe algum byte especial que é usado para separar as
> chaves internamente, esse valor fica em uma das variaveis magicas)
>
>
>>
>> Se eu fosse pesquisar um valor especifico e tivesse duas ou mais chaves
>> com o mesmo valor real seria problema
>>
> você tem que pesquisar exatamente o valor desejado, mas não tem problema
> pois você esta percorrendo todas as chaves
>
>> mas no meu caso *i*mporta que o valor estej*e *em um determinado
>> intervalo, podem ter 20 chaves iguais, estando no intervalo
>>
>> eu quero os 20 valores. 49??
>>
> que? 20 chaves iguais não pode!
>
>
> voltando a que eu respondi no email via celular, eu faria o codigo de
> outra forma,
> se for possivel e os intervalos forem já predetermindados:
> no lugar de
> $hmfe{$mirna} = $record if ($mirna);
> eu já montaria ( fill, populate, do the inserts ) o hash com as chaves já
> sendo o intervalo, calculado por uma funcao (que eu chameria de filtro)
>
> push(@{$hmfe{determina_intervalo($mirna)}, $record} if ($mirna);
>
> $truncate = 1000; # isso transforma -0.123456789 em -0.123 e desconsidera
> o que estiver na frente do 3. o round-up transformaria em 0.12*4*
> *
> *
> sub determina_intervalo {
> my $valor = shift;
> # isso so faz o truncate
> $valor = int ($valor * $truncate) / $truncate;
>
> # depois separa em grupos de 200:
> $valor *= 1000;
> return int($valor/200)*200; # isso retorna só '200' que ja vale, mas
> poderia ser tambem:
>
> my $tmp = int($valor/200)*200;
> retrun "$tmp:".$tmp+200 # que vai retornar '-400:-200' que
> }
>
> e assim o valor da chave do intervalo já contem todos os registros daquele
> intervalo, nem de if precisa!
>
> perl -E 'sub a{my $x = shift() * 1000; $x = int($x/200)*200; $x}; say a
> -0.12; say a -0.23; say a -0.25; say a -0.26; say a -5; say a -0.29; say a
> -0.5; say a -0.71'
> 0
> -200
> -200
> -200
> -5000
> -200
> -400
> -600
>
>
>
>> --
>> From: leonardo.bal...@gmail.com
>> Date: Fri, 30 Nov 2012 00:15:50 -0200
>>
>> To: rio-pm@pm.org
>> Subject: Re: [Rio-pm] Chaves de hash
>>
>> Quero participar dessa discussao antes do 50.
>>
>> Por que tanta peculiariade na dicotomia  de popular?
>>
>> Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao minha?
>>
>>
>> Leo Balter - via mobile
>>
>> Em 30/11/2012, às 00:02, Marcio Ferreira 
>> escreveu:
>>
>> 47
>> On Nov 29, 2012 11:35 PM, "Renato Santos"  wrote:
>>
>> #define float_epsilon 0.1;#define float_equal(a,b) (fabs((a) - (b)) < 
>> float_epsilon)
>>
>> *BTW*
>>
>> 2012/11/29 Blabos de Blebe 
>>
>> float_equal
>>
>>
>>
>>
>> --
>> Saravá,
>> Renato CRON
>> http://www.renatocron.com/blog/
>> @renato_cron 
>>
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>>
>> ___ Rio-pm mailing list
>> Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron 
>
>


-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron 
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-29 Thread Renato Santos
eu com a mania de corrigir o certo! é esteja mesmo!

2012/11/30 Renato Santos 

> estej*e*
>



-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron 
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm