Re: [Rio-pm] Chaves de hash

2012-12-04 Por tôpico Blabos de Blebe
Desculpa,

Não entendi a diferença entre:

perl -E 'sub a{say 1} sub b{say 2} if (a()  b()){}'
perl -E 'sub a{say 1} sub b{say 2} if (a() and b()){}'

perl -E 'sub a{say 1;return 0} sub b{say 2} if (a()  b()){}'
perl -E 'sub a{say 1;return 0} sub b{say 2} if (a() and b()){}'

Até onde eu sei, não existe operador de short circuit. O short circuit
é uma propriedade, uma otimização na avaliação de expressões lógicas.

Alguém estamos viajando?

[]'s

2012/11/30  thiagogla...@ticursos.net:
 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 ?


 Não é estúpido não. Vamos analisar a tabela da verdade da função and ou :

 0 x 0 = 0
 0 x 1 = 0
 1 x 0 = 0
 1 x 1 = 1

 Então, no if do código do nosso biólogo não haveria impacto real, sorry eu
 me deixei levar por outras coisas que estava pensando aqui.

 Mas voltando ao if:

 if($keys = $min and $keys = $max)

 O operador de short circuit só avaliaria a expresssão da direita ($keys =
 $max) se a primeira expressão for verdadeira. Ou seja, se $keys for menor
 que $min o Perl nem vai perder tempo checando pois 0 x N = 0. Então aqui eu
 me enganei, não ia fazer diferença no código do nosso colega.

 Por outro lado, vamos supor um caso que você queira aproveitar o teste if e
 executar duas subs na mesma linha de código:

 if ( foo and bar ){
...faça alguma coisa
 }
 else {
... bar só será executada se foo retornar true
 }

 por outro lado:

 if ( foo  bar ){
...foo e bar foram executadas. faça alguma coisa
 }
 else {
... foo e bar foram executadas mesmo com o  retornando false.
 }

 essa é a diferença.

 Em 2012-11-29 22:09, Bruno Buss escreveu:

 2012/11/29 thiagogla...@ticursos.net

 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 [1]


 Links:
 --
 [1] http://www.brunobuss.net


 ___
 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-12-04 Por tôpico Junior Moraes
Hi.

A diferença entre ** e *and* não é apenas a questão da precedência dos
operadores?
Penso eu que essa questão não tenha nada a ver com *short-circuiting*, já
que logicamente falando ambas fazem a mesma operação.

Exemplificando, quando temos:
use Data::Printer;
my $a = 1;
my $b = 0;

my $c = $a  $b;
my $d = $a and $b;
p $c;
p $d;

O valor de $c seria FALSE, mas o valor de $d seria TRUE.
Isso, porque, pela precedência dos operadores, a última operação é a mesma
coisa que:
(my $d = $a) and $b;

Deste modo, $d sempre resultará em TRUE, ignorando o $b.

Isto é, pelo menos é assim em outras linguagens e pelo que me parece, no
Perl também.

[]'s

Em 4 de dezembro de 2012 14:00, Blabos de Blebe bla...@gmail.com escreveu:

 Desculpa,

 Não entendi a diferença entre:

 perl -E 'sub a{say 1} sub b{say 2} if (a()  b()){}'
 perl -E 'sub a{say 1} sub b{say 2} if (a() and b()){}'

 perl -E 'sub a{say 1;return 0} sub b{say 2} if (a()  b()){}'
 perl -E 'sub a{say 1;return 0} sub b{say 2} if (a() and b()){}'

 Até onde eu sei, não existe operador de short circuit. O short circuit
 é uma propriedade, uma otimização na avaliação de expressões lógicas.

 Alguém estamos viajando?

 []'s

 2012/11/30  thiagogla...@ticursos.net:
  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 ?
 
 
  Não é estúpido não. Vamos analisar a tabela da verdade da função and ou
 :
 
  0 x 0 = 0
  0 x 1 = 0
  1 x 0 = 0
  1 x 1 = 1
 
  Então, no if do código do nosso biólogo não haveria impacto real, sorry
 eu
  me deixei levar por outras coisas que estava pensando aqui.
 
  Mas voltando ao if:
 
  if($keys = $min and $keys = $max)
 
  O operador de short circuit só avaliaria a expresssão da direita ($keys
 =
  $max) se a primeira expressão for verdadeira. Ou seja, se $keys for menor
  que $min o Perl nem vai perder tempo checando pois 0 x N = 0. Então aqui
 eu
  me enganei, não ia fazer diferença no código do nosso colega.
 
  Por outro lado, vamos supor um caso que você queira aproveitar o teste
 if e
  executar duas subs na mesma linha de código:
 
  if ( foo and bar ){
 ...faça alguma coisa
  }
  else {
 ... bar só será executada se foo retornar true
  }
 
  por outro lado:
 
  if ( foo  bar ){
 ...foo e bar foram executadas. faça alguma coisa
  }
  else {
 ... foo e bar foram executadas mesmo com o  retornando false.
  }
 
  essa é a diferença.
 
  Em 2012-11-29 22:09, Bruno Buss escreveu:
 
  2012/11/29 thiagogla...@ticursos.net
 
  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 [1]
 
 
  Links:
  --
  [1] http://www.brunobuss.net
 
 
  ___
  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-12-04 Por tôpico Tiago Peczenyj
brinque com os valores

https://gist.github.com/4205775

1,0
0,1
6,666
666,6

etc

2012/12/4 Aureliano Guedes guedes_1...@hotmail.com

  Alguem passa um exemplo onde esteja evidente a diferença entre   e and!
 Um caso onde em um de certo e em outro não!

  From: bla...@gmail.com
  Date: Tue, 4 Dec 2012 14:00:45 -0200

  To: rio-pm@pm.org
  Subject: Re: [Rio-pm] Chaves de hash
 
  Desculpa,
 
  Não entendi a diferença entre:
 
  perl -E 'sub a{say 1} sub b{say 2} if (a()  b()){}'
  perl -E 'sub a{say 1} sub b{say 2} if (a() and b()){}'
 
  perl -E 'sub a{say 1;return 0} sub b{say 2} if (a()  b()){}'
  perl -E 'sub a{say 1;return 0} sub b{say 2} if (a() and b()){}'
 
  Até onde eu sei, não existe operador de short circuit. O short circuit
  é uma propriedade, uma otimização na avaliação de expressões lógicas.
 
  Alguém estamos viajando?
 
  []'s
 
  2012/11/30 thiagogla...@ticursos.net:
   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 ?
  
  
   Não é estúpido não. Vamos analisar a tabela da verdade da função and
 ou :
  
   0 x 0 = 0
   0 x 1 = 0
   1 x 0 = 0
   1 x 1 = 1
  
   Então, no if do código do nosso biólogo não haveria impacto real,
 sorry eu
   me deixei levar por outras coisas que estava pensando aqui.
  
   Mas voltando ao if:
  
   if($keys = $min and $keys = $max)
  
   O operador de short circuit só avaliaria a expresssão da direita
 ($keys =
   $max) se a primeira expressão for verdadeira. Ou seja, se $keys for
 menor
   que $min o Perl nem vai perder tempo checando pois 0 x N = 0. Então
 aqui eu
   me enganei, não ia fazer diferença no código do nosso colega.
  
   Por outro lado, vamos supor um caso que você queira aproveitar o teste
 if e
   executar duas subs na mesma linha de código:
  
   if ( foo and bar ){
   ...faça alguma coisa
   }
   else {
   ... bar só será executada se foo retornar true
   }
  
   por outro lado:
  
   if ( foo  bar ){
   ...foo e bar foram executadas. faça alguma coisa
   }
   else {
   ... foo e bar foram executadas mesmo com o  retornando false.
   }
  
   essa é a diferença.
  
   Em 2012-11-29 22:09, Bruno Buss escreveu:
  
   2012/11/29 thiagogla...@ticursos.net
  
   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 [1]
  
  
   Links:
   --
   [1] http://www.brunobuss.net
  
  
   ___
   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




-- 
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-12-04 Por tôpico Adriano Ferreira
2012/11/30 Aureliano Guedes guedes_1...@hotmail.com:
 Quanto ao and e o , o  consome menos memória que o and, por ser short
 circuits??

Não. A única diferença é a precedência. Ambos fazem short circuit.

pirl @ sub { $x and $y }
sub {
package Shell::Perl::sandbox;
use warnings;
use strict 'refs';
$y if $x;
}
pirl @ sub { $x  $y }
sub {
package Shell::Perl::sandbox;
use warnings;
use strict 'refs';
$y if $x;
}
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Chaves de hash

2012-12-04 Por tôpico Adriano Ferreira
2012/12/4 Aureliano Guedes guedes_1...@hotmail.com:
 Alguem passa um exemplo onde esteja evidente a diferença entre   e and!
 Um caso onde em um de certo e em outro não!

Não acredite em tudo que você ouve, mesmo na lista da Rio-pm. Dizer
que usar and em

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


é um erro, é um exagero dos grandes, quase purismo.

Em geral, só uso o and quando estou fazendo uma conjunção de
statements (do mesmo tipo que o or) como nos exemplos clássicos

  my $product = current_product()
   and return $product-description;

  open my $f, '', 'file.txt'
  or die Bad kitty: $@;

  my $var = frobnicate()
   or return;  # exit the current function if result of
frobnicate() is false

E o  eu deixo só para conjunção de expressões. Por exemplo, eu usaria

 if ($keys = $min  $keys = $max) {

porque isto parece natural para mim. No entanto, isto é puramente uma
questão de estilo, e programadores têm estilos diferentes. Na base de
código em que trabalho, você encontra os dois tipos de expressão com
 e and (ou a dicotomia similar entre || e or). Eu não diria para
o Graham Barr que ele usou and / or errado (ainda que eu
preferisse  / || em alguns lugares). =)

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


Re: [Rio-pm] Chaves de hash

2012-12-04 Por tôpico Adriano Ferreira
2012/12/4 Blabos de Blebe bla...@gmail.com:
 Até onde eu sei, não existe operador de short circuit. O short circuit
 é uma propriedade, uma otimização na avaliação de expressões lógicas.

Sim, existem operadores de short circuit que são aqueles que podem
ou não completar a avaliação (evaluation) do segundo argumento
baseado no primeiro. Este é o caso dos operadores lógicos

 and or xor err
  || ^ //

Assim em

$a = 0; ++$a || ++$a; $a  #  $a termina como 1

o segundo ++$a nunca vai ser executado, mas em

$a = -1; ++$a || ++$a; $a

o primeiro ++$a deixa 0 em $a e o segundo ++$a deixa 1.

Você não pode representar estes operadores como funções

 f( operando1, operando2 )

onde todos os operandos são calculados antes da invocação de f - que
é o mesmo de caso de se representar os comandos condicionais if e
unless. Aposto que vocês lembraram das aulas de linguagem
funcionais, applicative vs normal order evaluation, etc.
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Chaves de hash

2012-12-04 Por tôpico Vinícius Miasato
last;

Em 4 de dezembro de 2012 14:54, Blabos de Blebe bla...@gmail.com escreveu:

  (my $d = $a) and $b;

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

 A pegadinha (deixada como exercício) é que o operador de atribuição
 tem maior precedência que o operador 'and'.

 Por isso os exemplos usando atribuição estão se cagando todos:

 $c = $a  $b

 é diferente de

 $c = $a and $b

 não por causa da diferença mística entre '' e 'and', mas por causa
 do operador de atribuição ter mais precedência que 'and' e menos
 precedência que o '';

 $c = $a  $b  == $c = ( $a  $b )
 $c = $a and $b == ($c = $a) and $b

 RTFM!

 []'s

 2012/12/4 Junior Moraes juniiior...@gmail.com:
  Hi.
 
  A diferença entre  e and não é apenas a questão da precedência dos
  operadores?
  Penso eu que essa questão não tenha nada a ver com short-circuiting, já
 que
  logicamente falando ambas fazem a mesma operação.
 
  Exemplificando, quando temos:
  use Data::Printer;
  my $a = 1;
  my $b = 0;
 
  my $c = $a  $b;
  my $d = $a and $b;
  p $c;
  p $d;
 
  O valor de $c seria FALSE, mas o valor de $d seria TRUE.
  Isso, porque, pela precedência dos operadores, a última operação é a
 mesma
  coisa que:
  (my $d = $a) and $b;
 
  Deste modo, $d sempre resultará em TRUE, ignorando o $b.
 
  Isto é, pelo menos é assim em outras linguagens e pelo que me parece, no
  Perl também.
 
  []'s
 
  Em 4 de dezembro de 2012 14:00, Blabos de Blebe bla...@gmail.com
 escreveu:
 
  Desculpa,
 
  Não entendi a diferença entre:
 
  perl -E 'sub a{say 1} sub b{say 2} if (a()  b()){}'
  perl -E 'sub a{say 1} sub b{say 2} if (a() and b()){}'
 
  perl -E 'sub a{say 1;return 0} sub b{say 2} if (a()  b()){}'
  perl -E 'sub a{say 1;return 0} sub b{say 2} if (a() and b()){}'
 
  Até onde eu sei, não existe operador de short circuit. O short circuit
  é uma propriedade, uma otimização na avaliação de expressões lógicas.
 
  Alguém estamos viajando?
 
  []'s
 
  2012/11/30  thiagogla...@ticursos.net:
   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 ?
  
  
   Não é estúpido não. Vamos analisar a tabela da verdade da função and
 ou
   :
  
   0 x 0 = 0
   0 x 1 = 0
   1 x 0 = 0
   1 x 1 = 1
  
   Então, no if do código do nosso biólogo não haveria impacto real,
 sorry
   eu
   me deixei levar por outras coisas que estava pensando aqui.
  
   Mas voltando ao if:
  
   if($keys = $min and $keys = $max)
  
   O operador de short circuit só avaliaria a expresssão da direita
 ($keys
   =
   $max) se a primeira expressão for verdadeira. Ou seja, se $keys for
   menor
   que $min o Perl nem vai perder tempo checando pois 0 x N = 0. Então
 aqui
   eu
   me enganei, não ia fazer diferença no código do nosso colega.
  
   Por outro lado, vamos supor um caso que você queira aproveitar o teste
   if e
   executar duas subs na mesma linha de código:
  
   if ( foo and bar ){
  ...faça alguma coisa
   }
   else {
  ... bar só será executada se foo retornar true
   }
  
   por outro lado:
  
   if ( foo  bar ){
  ...foo e bar foram executadas. faça alguma coisa
   }
   else {
  ... foo e bar foram executadas mesmo com o  retornando false.
   }
  
   essa é a diferença.
  
   Em 2012-11-29 22:09, Bruno Buss escreveu:
  
   2012/11/29 thiagogla...@ticursos.net
  
   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 [1]
  
  
   Links:
   --
   [1] http://www.brunobuss.net
  
  
   ___
   Rio-pm mailing list
   Rio-pm@pm.org
   http://mail.pm.org/mailman/listinfo/rio-pm
  
  
   ___
   Rio-pm mailing list
   Rio-pm@pm.org
   

Re: [Rio-pm] Chaves de hash

2012-12-04 Por tôpico Aureliano Guedes

Ok, segundo o perldoc:
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: the right
expression is evaluated only if the left expression is true.

Acho que não é nada impactante a diferença de usar  ou and em dias normais, 
mas quando trabalhar bit-a-bit acho que o  é mais apropiado 

Date: Tue, 4 Dec 2012 15:23:04 -0200
From: viniciusmias...@gmail.com
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

last;

Em 4 de dezembro de 2012 14:54, Blabos de Blebe bla...@gmail.com escreveu:

 (my $d = $a) and $b;



Correto, conforme

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



A pegadinha (deixada como exercício) é que o operador de atribuição

tem maior precedência que o operador 'and'.



Por isso os exemplos usando atribuição estão se cagando todos:



$c = $a  $b



é diferente de



$c = $a and $b



não por causa da diferença mística entre '' e 'and', mas por causa

do operador de atribuição ter mais precedência que 'and' e menos

precedência que o '';



$c = $a  $b  == $c = ( $a  $b )

$c = $a and $b == ($c = $a) and $b



RTFM!



[]'s



2012/12/4 Junior Moraes juniiior...@gmail.com:

 Hi.



 A diferença entre  e and não é apenas a questão da precedência dos

 operadores?

 Penso eu que essa questão não tenha nada a ver com short-circuiting, já que

 logicamente falando ambas fazem a mesma operação.



 Exemplificando, quando temos:

 use Data::Printer;

 my $a = 1;

 my $b = 0;



 my $c = $a  $b;

 my $d = $a and $b;

 p $c;

 p $d;



 O valor de $c seria FALSE, mas o valor de $d seria TRUE.

 Isso, porque, pela precedência dos operadores, a última operação é a mesma

 coisa que:

 (my $d = $a) and $b;



 Deste modo, $d sempre resultará em TRUE, ignorando o $b.



 Isto é, pelo menos é assim em outras linguagens e pelo que me parece, no

 Perl também.



 []'s



 Em 4 de dezembro de 2012 14:00, Blabos de Blebe bla...@gmail.com escreveu:



 Desculpa,



 Não entendi a diferença entre:



 perl -E 'sub a{say 1} sub b{say 2} if (a()  b()){}'

 perl -E 'sub a{say 1} sub b{say 2} if (a() and b()){}'



 perl -E 'sub a{say 1;return 0} sub b{say 2} if (a()  b()){}'

 perl -E 'sub a{say 1;return 0} sub b{say 2} if (a() and b()){}'



 Até onde eu sei, não existe operador de short circuit. O short circuit

 é uma propriedade, uma otimização na avaliação de expressões lógicas.



 Alguém estamos viajando?



 []'s



 2012/11/30  thiagogla...@ticursos.net:

  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 ?

 

 

  Não é estúpido não. Vamos analisar a tabela da verdade da função and ou

  :

 

  0 x 0 = 0

  0 x 1 = 0

  1 x 0 = 0

  1 x 1 = 1

 

  Então, no if do código do nosso biólogo não haveria impacto real, sorry

  eu

  me deixei levar por outras coisas que estava pensando aqui.

 

  Mas voltando ao if:

 

  if($keys = $min and $keys = $max)

 

  O operador de short circuit só avaliaria a expresssão da direita ($keys

  =

  $max) se a primeira expressão for verdadeira. Ou seja, se $keys for

  menor

  que $min o Perl nem vai perder tempo checando pois 0 x N = 0. Então aqui

  eu

  me enganei, não ia fazer diferença no código do nosso colega.

 

  Por outro lado, vamos supor um caso que você queira aproveitar o teste

  if e

  executar duas subs na mesma linha de código:

 

  if ( foo and bar ){

 ...faça alguma coisa

  }

  else {

 ... bar só será executada se foo retornar true

  }

 

  por outro lado:

 

  if ( foo  bar ){

 ...foo e bar foram executadas. faça alguma coisa

  }

  else {

 ... foo e bar foram executadas mesmo com o  retornando false.

  }

 

  essa é a diferença.

 

  Em 2012-11-29 22:09, Bruno Buss escreveu:

 

  2012/11/29 thiagogla...@ticursos.net

 

  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

Re: [Rio-pm] Chaves de hash

2012-12-04 Por tôpico Renato Santos
Gente, não tem diferença na comparação!!
é só na ordem que as coisas ocorrem conforme as coisas foram escritas!!

alguem ai ja disse:

$c = $a  $b  *COMPILA PRA *$c = ( $a  $b )
$c = $a and $b *COMPILA PRA* ($c = $a) and $b

2012/12/4 Aureliano Guedes guedes_1...@hotmail.com

 Acho que não é nada impactante a diferença de usar  ou and em dias
 normais, mas quando trabalhar bit-a-bit acho que o  é mais apropiado




-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron http://twitter.com/#!/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-12-04 Por tôpico Adriano Ferreira
2012/12/4 Aureliano Guedes guedes_1...@hotmail.com:
 mas quando trabalhar bit-a-bit acho que o  é mais apropiado

Para trabalhar bit-a-bit, os operadores bit-a-bit como o 
provavelmente seriam mais adequados.

Bitwise And
http://perldoc.perl.org/perlop.html#Bitwise-And

Bitwise Or and Exclusive Or
http://perldoc.perl.org/perlop.html#Bitwise-Or-and-Exclusive-Or
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Chaves de hash

2012-12-04 Por tôpico Aureliano Guedes

O exemplo do junio é bacana:

use Data::Printer;
my $a = 1;
my $b = 0;

my $c = $a  $b;
my $d = $a and $b;
p $c;
p $d;

 Date: Tue, 4 Dec 2012 15:50:13 -0200
 From: a.r.ferre...@gmail.com
 To: rio-pm@pm.org
 Subject: Re: [Rio-pm] Chaves de hash
 
 2012/12/4 Aureliano Guedes guedes_1...@hotmail.com:
  mas quando trabalhar bit-a-bit acho que o  é mais apropiado
 
 Para trabalhar bit-a-bit, os operadores bit-a-bit como o 
 provavelmente seriam mais adequados.
 
 Bitwise And
 http://perldoc.perl.org/perlop.html#Bitwise-And
 
 Bitwise Or and Exclusive Or
 http://perldoc.perl.org/perlop.html#Bitwise-Or-and-Exclusive-Or
 ___
 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-30 Por tôpico Tiago Peczenyj
Porra o q? To mostrando q eh diferente no contexto q eu conheco...
Em 29/11/2012 23:14, Blabos de Blebe bla...@gmail.com escreveu:

 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 tiago.pecze...@gmail.com:
  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 bruno.b...@gmail.com
 
 
 
  2012/11/29 Bruno Buss bruno.b...@gmail.com
 
  On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos renato.c...@gmail.com
 
  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

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

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico Aureliano Guedes

Sua ideia é louvável, mas há um problema.

No Arquivo que eu postei, eu compilei de a rotina de um modulo dentro do 
script.
Isso se deve ao fato de eu ter desenvolvido um modulo que parseia todo o 
documento naquele formato
e cria um hash colocando como chave o valor que eu procuro, que pode ser o nome 
do micro-RNA, a energia de ligação,
a posição no gene, ...
Criei esse modulo (que futuramente pretendo adicionar no CPAN ou BioPerl) para 
facilitar minha vida.

Por isso eu já não filtro o intervalo na própria regex.

Quanto ao and e o , o  consome menos memória que o and, por ser short 
circuits??

Date: Fri, 30 Nov 2012 06:22:03 -0200
From: tiago.pecze...@gmail.com
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

Porra o q? To mostrando q eh diferente no contexto q eu conheco...
Em 29/11/2012 23:14, Blabos de Blebe bla...@gmail.com escreveu:

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 tiago.pecze...@gmail.com:

 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 bruno.b...@gmail.com







 2012/11/29 Bruno Buss bruno.b...@gmail.com



 On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos renato.c...@gmail.com

 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



___
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-30 Por tôpico thiagoglauco

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 ?


Não é estúpido não. Vamos analisar a tabela da verdade da função and ou 
:


0 x 0 = 0
0 x 1 = 0
1 x 0 = 0
1 x 1 = 1

Então, no if do código do nosso biólogo não haveria impacto real, sorry 
eu me deixei levar por outras coisas que estava pensando aqui.


Mas voltando ao if:
if($keys = $min and $keys = $max)

O operador de short circuit só avaliaria a expresssão da direita ($keys 
= $max) se a primeira expressão for verdadeira. Ou seja, se $keys for 
menor que $min o Perl nem vai perder tempo checando pois 0 x N = 0. 
Então aqui eu me enganei, não ia fazer diferença no código do nosso 
colega.


Por outro lado, vamos supor um caso que você queira aproveitar o teste 
if e executar duas subs na mesma linha de código:


if ( foo and bar ){
   ...faça alguma coisa
}
else {
   ... bar só será executada se foo retornar true
}

por outro lado:

if ( foo  bar ){
   ...foo e bar foram executadas. faça alguma coisa
}
else {
   ... foo e bar foram executadas mesmo com o  retornando false.
}

essa é a diferença.

Em 2012-11-29 22:09, Bruno Buss escreveu:

2012/11/29 thiagogla...@ticursos.net

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 [1]


Links:
--
[1] http://www.brunobuss.net

___
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-30 Por tôpico thiagoglauco

Não funcionaria em 100% dos casos.

Em 2012-11-29 23:27, Blabos de Blebe escreveu:

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  thiagogla...@ticursos.net:

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,  thiagogla...@ticursos.net 
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

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico thiagoglauco


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

Com esse define de float_equal e float_epsilon acho que funcionaria.

Em 2012-11-29 23:27, Blabos de Blebe escreveu:

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  thiagogla...@ticursos.net:

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,  thiagogla...@ticursos.net 
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 

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico thiagoglauco
Hashs não têm mais de uma chave igual. Ele vai mudar o valor 
relacionado à chave e não criar outra chave com o mesmo valor.


Em 2012-11-30 00:24, Aureliano Guedes escreveu:

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
marciodesouzaferre...@gmail.com escreveu:


47

On Nov 29, 2012 11:35 PM, Renato Santos renato.c...@gmail.com 
wrote:



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

BTW

2012/11/29 Blabos de Blebe bla...@gmail.com


float_equal


--

Saravá,
Renato CRON

http://www.renatocron.com/blog/ [1]
@renato_cron [2]

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



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


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

Links:
--
[1] http://www.renatocron.com/blog/
[2] http://twitter.com/#%21/renato_cron
[3] 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-30 Por tôpico Renato Santos
faça o push (só que sem a funcao),

outra forma, porque não usar uma array ? e ai você coloca assim:

 my @hmfe;

  while (..){ ...
  push @hmfe, {valor = $mirna, registro = $record};
  ...
  }


e ai você faria o seu loop pra encontrar o valor mudando apenas

$keys por $linha-{valor}

foreach my $linha (@hmfe){
   ... if ..
}

-
uma coisa: eu vi que sua funcao lá de intervalo está criando tudo de novo,
dependendo do caso, você pode fazer a leitura apenas uma vez, retornar
o @hmfe (em referencia {  return \@hmfe }, para nao duplicar na memoria) e
depois usar ele na funcao que recebe o intervalo e retorna os registros.

2012/11/30 Aureliano Guedes guedes_1...@hotmail.com

  Biólogo não, biomedico, acredite essa diferença fere nossos sentimentos.
 hahaha


  Hashs não têm mais de uma chave igual. Ele vai mudar o valor
  relacionado à chave e não criar outra chave com o mesmo valor.

 Agora sim, isso é um problemão. Estarei perdendo dados assim.

 Como poderia reverter isso então??

 Faria a chave ser valor e o valor ser chave?? Quais minhas opções??

 sub h_energy{
 my $self = shift;
 my $data = $self-h_data || die cannot find data;
 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;
 }

  Date: Fri, 30 Nov 2012 10:30:17 -0200
  From: thiagogla...@ticursos.net

  To: rio-pm@pm.org
  Subject: Re: [Rio-pm] Chaves de hash
 
  Hashs não têm mais de uma chave igual. Ele vai mudar o valor
  relacionado à chave e não criar outra chave com o mesmo valor.
 
  Em 2012-11-30 00:24, Aureliano Guedes escreveu:
   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
   marciodesouzaferre...@gmail.com escreveu:
  
   47
  
   On Nov 29, 2012 11:35 PM, Renato Santos renato.c...@gmail.com
   wrote:
  
   #define float_epsilon 0.1;
   #define float_equal(a,b) (fabs((a) - (b))  float_epsilon)
  
   BTW
  
   2012/11/29 Blabos de Blebe bla...@gmail.com
  
   float_equal
  
   --
  
   Saravá,
   Renato CRON
  
   http://www.renatocron.com/blog/ [1]
   @renato_cron [2]
  
   ___
   Rio-pm mailing list
   Rio-pm@pm.org
   http://mail.pm.org/mailman/listinfo/rio-pm [3]
  
   ___
   Rio-pm mailing list
   Rio-pm@pm.org
   http://mail.pm.org/mailman/listinfo/rio-pm [3]
  
   ___ Rio-pm mailing list
   Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
  
   Links:
   --
   [1] http://www.renatocron.com/blog/
   [2] http://twitter.com/#%21/renato_cron
   [3] 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 http://twitter.com/#!/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-30 Por tôpico thiagoglauco

Biólogo não, biomedico

Putz, really sorry!!! 2 gaf.


Agora sim, isso é um problemão. Estarei perdendo dados assim.

Sim, estará perdendo dados.


Faria a chave ser valor e o valor ser chave?? Quais minhas opções??
Não entendo de biomedicina, mas acho que deveriamos pensar em algo como 
uma estrutura de dados mas bem planejada. Por que você está usando o 
valor de calorias como chave do hash?


Se você criar uma estrutura mais complexa, como array de hashs ou mesmo 
um array de objetos... opções não faltam.


Em 2012-11-30 10:37, Aureliano Guedes escreveu:
Biólogo não, biomedico, acredite essa diferença fere nossos 
sentimentos. hahaha



Hashs não têm mais de uma chave igual. Ele vai mudar o valor
relacionado à chave e não criar outra chave com o mesmo valor.


Agora sim, isso é um problemão. Estarei perdendo dados assim.

Como poderia reverter isso então??

Faria a chave ser valor e o valor ser chave?? Quais minhas opções??

sub h_energy{
 my $self = shift;
 my $data = $self-h_data || die cannot find data;
 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;
}


Date: Fri, 30 Nov 2012 10:30:17 -0200
From: thiagogla...@ticursos.net
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

Hashs não têm mais de uma chave igual. Ele vai mudar o valor
relacionado à chave e não criar outra chave com o mesmo valor.

Em 2012-11-30 00:24, Aureliano Guedes escreveu:
 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
 marciodesouzaferre...@gmail.com escreveu:

 47

 On Nov 29, 2012 11:35 PM, Renato Santos renato.c...@gmail.com
 wrote:

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

 BTW

 2012/11/29 Blabos de Blebe bla...@gmail.com

 float_equal

 --

 Saravá,
 Renato CRON

 http://www.renatocron.com/blog/ [1]
 @renato_cron [2]

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

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

 ___ Rio-pm mailing 
list

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

 Links:
 --
 [1] http://www.renatocron.com/blog/
 [2] http://twitter.com/#%21/renato_cron
 [3] 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-30 Por tôpico Renato Santos
que toda vez que você passar termofilter('arquivo', -30, -20) todo o
arquivo estaria sendo lido (o q é obvio)

que por exemplo, poderia ser

$dados = h_energy('arquivo.txt');

termofilter($dados, -30, -20);

nesse caso, o codigo ficaria assim:
http://pastebin.com/ZyWPxq9A



2012/11/30 Aureliano Guedes guedes_1...@hotmail.com

  Entendi, eu so não entendi a parte de uma coisa: eu vi que sua funcao lá
 de intervalo está criando tudo de novo, dependendo do caso, você pode fazer
 a leitura apenas uma vez,.

 O que você quis dizer com isso?

 --
 From: renato.c...@gmail.com
 Date: Fri, 30 Nov 2012 10:44:24 -0200

 To: rio-pm@pm.org
 Subject: Re: [Rio-pm] Chaves de hash

 faça o push (só que sem a funcao),

 outra forma, porque não usar uma array ? e ai você coloca assim:

  my @hmfe;

   while (..){ ...
   push @hmfe, {valor = $mirna, registro = $record};
   ...
   }


 e ai você faria o seu loop pra encontrar o valor mudando apenas

 $keys por $linha-{valor}

 foreach my $linha (@hmfe){
... if ..
 }

 -
 uma coisa: eu vi que sua funcao lá de intervalo está criando tudo de novo,
 dependendo do caso, você pode fazer a leitura apenas uma vez, retornar
 o @hmfe (em referencia {  return \@hmfe }, para nao duplicar na memoria) e
 depois usar ele na funcao que recebe o intervalo e retorna os registros.

 2012/11/30 Aureliano Guedes guedes_1...@hotmail.com

  Biólogo não, biomedico, acredite essa diferença fere nossos sentimentos.
 hahaha


  Hashs não têm mais de uma chave igual. Ele vai mudar o valor
  relacionado à chave e não criar outra chave com o mesmo valor.

 Agora sim, isso é um problemão. Estarei perdendo dados assim.

 Como poderia reverter isso então??

 Faria a chave ser valor e o valor ser chave?? Quais minhas opções??

 sub h_energy{
 my $self = shift;
 my $data = $self-h_data || die cannot find data;
 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;
 }

  Date: Fri, 30 Nov 2012 10:30:17 -0200
  From: thiagogla...@ticursos.net

  To: rio-pm@pm.org
  Subject: Re: [Rio-pm] Chaves de hash
 
  Hashs não têm mais de uma chave igual. Ele vai mudar o valor
  relacionado à chave e não criar outra chave com o mesmo valor.
 
  Em 2012-11-30 00:24, Aureliano Guedes escreveu:
   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
   marciodesouzaferre...@gmail.com escreveu:
  
   47
  
   On Nov 29, 2012 11:35 PM, Renato Santos renato.c...@gmail.com
   wrote:
  
   #define float_epsilon 0.1;
   #define float_equal(a,b) (fabs((a) - (b))  float_epsilon)
  
   BTW
  
   2012/11/29 Blabos de Blebe bla...@gmail.com
  
   float_equal
  
   --
  
   Saravá,
   Renato CRON
  
   http://www.renatocron.com/blog/ [1]
   @renato_cron [2]
  
   ___
   Rio-pm mailing list
   Rio-pm@pm.org
   http://mail.pm.org/mailman/listinfo/rio-pm [3]
  
   ___
   Rio-pm mailing list
   Rio-pm@pm.org
   http://mail.pm.org/mailman/listinfo/rio-pm [3]
  
   ___ Rio-pm mailing list
   Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
  
   Links:
   --
   [1] http://www.renatocron.com/blog/
   [2] http://twitter.com/#%21/renato_cron
   [3] 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-30 Por tôpico Rodrigo Mosconi (perl)
O melhor seria;

if ( abs($a-$b)  $errro ) {
   say tratar como igual;
} else {
   say tratar como diferentes;
};

sendo $erro a margem de erro aceitável ($erro = 0.1, por exemplo)

Caso precise comparar maior ou menor:

if ( $a  ($b -$erro) ) {
  say tratar como maior;
}

if ( $a  ($b + $erro) ) {
  say tratar como menor;
}

Umas das primeiras coisa que são ensinados em cursos de cálculo
numérico é tratamento de erro.

Att

Mosconi

Em 29 de novembro de 2012 23:27, Blabos de Blebe bla...@gmail.com escreveu:
 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  thiagogla...@ticursos.net:
 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,  thiagogla...@ticursos.net 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, 

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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 Por tôpico 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,  thiagogla...@ticursos.net 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 Por tôpico 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,  thiagogla...@ticursos.net 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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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,  thiagogla...@ticursos.net 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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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 http://github.com/dvinciguerra


2012/11/29 Aureliano Guedes guedes_1...@hotmail.com

  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, thiagogla...@ticursos.net 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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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, thiagogla...@ticursos.net 
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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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 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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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 guedes_1...@hotmail.com

  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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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, 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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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 thiagogla...@ticursos.net

 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.htmlhttp://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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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 guedes_1...@hotmail.com

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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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 guedes_1...@hotmail.com
 
  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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico Renato Santos
http://perldoc.perl.org/functions/-X.html

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

2012/11/29 Aureliano Guedes guedes_1...@hotmail.com

  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 guedes_1...@hotmail.com
  
   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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico Renato Santos
 pra evitar 'QUANDO EU COMPREI, FUNCIONAVA RAPIDO'

2012/11/29 Tiago Peczenyj tiago.pecze...@gmail.com

 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 http://twitter.com/#!/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 Por tôpico 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 bruno.b...@gmail.com wrote:



 2012/11/29 thiagogla...@ticursos.net

 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 Por tôpico Bruno Buss
2012/11/29 Bruno Buss bruno.b...@gmail.com

 On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos renato.c...@gmail.comwrote:

 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 Por tôpico 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 bruno.b...@gmail.com



 2012/11/29 Bruno Buss bruno.b...@gmail.com

 On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos renato.c...@gmail.comwrote:

 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 Por tôpico 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  thiagogla...@ticursos.net:
 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 guedes_1...@hotmail.com

 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

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico 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 tiago.pecze...@gmail.com:
 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 bruno.b...@gmail.com



 2012/11/29 Bruno Buss bruno.b...@gmail.com

 On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos renato.c...@gmail.com
 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 Por tôpico 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 Blebebla...@gmail.com
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  thiagogla...@ticursos.net:
 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 guedes_1...@hotmail.com

 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 Por tôpico Blabos de Blebe
Só a gente mesmo pra ficar discutindo nota de rodapé de livro :)

2012/11/29 Vinícius Miasato viniciusmias...@gmail.com:
 já está chegando em 50 mensagens na thread, quem irá citar ele ?

 Em quinta-feira, 29 de novembro de 2012, Blabos de Blebebla...@gmail.com
 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  thiagogla...@ticursos.net:
 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 guedes_1...@hotmail.com

 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 Por tôpico 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  thiagogla...@ticursos.net:
 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,  thiagogla...@ticursos.net 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
 

Re: [Rio-pm] Chaves de hash

2012-11-29 Por tôpico Renato Santos
#define float_epsilon 0.1;#define float_equal(a,b) (fabs((a) -
(b))  float_epsilon)

*BTW*

2012/11/29 Blabos de Blebe bla...@gmail.com

 float_equal




-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron http://twitter.com/#!/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 Por tôpico 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 marciodesouzaferre...@gmail.com 
escreveu:

 47
 
 On Nov 29, 2012 11:35 PM, Renato Santos renato.c...@gmail.com wrote:
 
 
 #define float_epsilon 0.1;
 #define float_equal(a,b) (fabs((a) - (b))  float_epsilon)
 BTW
 
 2012/11/29 Blabos de Blebe bla...@gmail.com
 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 Por tôpico 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 marciodesouzaferre...@gmail.com 
escreveu:

47
On Nov 29, 2012 11:35 PM, Renato Santos renato.c...@gmail.com wrote:


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


BTW
2012/11/29 Blabos de Blebe bla...@gmail.com



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 Por tôpico 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 guedes_1...@hotmail.com

  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 marciodesouzaferre...@gmail.com
 escreveu:

 47
 On Nov 29, 2012 11:35 PM, Renato Santos renato.c...@gmail.com wrote:

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

 *BTW*

 2012/11/29 Blabos de Blebe bla...@gmail.com

 float_equal




 --
 Saravá,
 Renato CRON
 http://www.renatocron.com/blog/
 @renato_cron http://twitter.com/#%21/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 Por tôpico 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 renato.c...@gmail.com

 pronto, na 51 eu respondo!

 2012/11/30 Aureliano Guedes guedes_1...@hotmail.com

  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 marciodesouzaferre...@gmail.com
 escreveu:

 47
 On Nov 29, 2012 11:35 PM, Renato Santos renato.c...@gmail.com wrote:

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

 *BTW*

 2012/11/29 Blabos de Blebe bla...@gmail.com

 float_equal




 --
 Saravá,
 Renato CRON
 http://www.renatocron.com/blog/
 @renato_cron http://twitter.com/#%21/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 http://twitter.com/#!/renato_cron




-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron http://twitter.com/#!/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 Por tôpico Renato Santos
eu com a mania de corrigir o certo! é esteja mesmo!

2012/11/30 Renato Santos renato.c...@gmail.com

 estej*e*




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

[Rio-pm] Chaves de hash

2012-11-28 Por tôpico Aureliano Guedes

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

Re: [Rio-pm] Chaves de hash

2012-11-28 Por tôpico Renato Santos
VERDADE! HAHA

Mas acho que estamos com um problema aqui de nomes. talvez assim fique mais
claro:

foreach my $numero (keys %d) {
if ($numero = $min ) { # atencao, numeros iguais entram aqui
print $numero tem valor $d{$numero} e eh menor que $min\n;
}elsif ($numero  $min ) {
print $numero tem valor $d{$numero} e eh maior que $max\n;
}
}

2012/11/28 Ole Peter Smith ole@gmail.com

 como que keys sera menor do min e maior do que max? so se os tres sao
 iguais nao?

 if keys =min min=keys
 if krys = max max=keys

 0le

 Send via Android
 On Nov 28, 2012 9:43 PM, Aureliano Guedes guedes_1...@hotmail.com
 wrote:

  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




-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron http://twitter.com/#!/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-28 Por tôpico Bruno Buss
Sim, o seu exemplo é a perfeita demonstração do que eu disse: a única
diferença é que você não consegue fazer short-circuit com 'and', só com
''.

A menos que o sinal de = e = agora tenha algum side-effect como o '++',
eu não particularmente não consigo chegar numa linha razoável de raciocínio
para reclamar do , and e precedências no if do Aureliano.

[ ]'s

2012/11/28 Renato Santos renato.c...@gmail.com

 Acho que o que o Marcio disse isso pois o *and* computa ambos os lados da
 expressão, para então retornar um boolean (ou continuar a sequencia de
 computar mais 'ands' e 'ors')


 $x = 0;
 $x and $x++; # $x = 1

 $y = 0;
 $y  $y++; # $y = 0


 perl -e 'use v5.14.0;use v5.14.0; my $m=0; say $m  $m++; say $m'
 *0*
 0

 perl -e 'use v5.14.0;use v5.14.0; my $m=0; say $m and $m++; say $m'
 *0*
 1


 o retorno foi o mesmo, mas o comportamento não.

 2012/11/28 Bruno Buss bruno.b...@gmail.com

 @Thiago e Marcio:
 O que vocês estão falando? Pelo amor de Larry...
 O operador 'and' é *exatamente* igual ao '', tirando o nível de
 precedência... onde o 'and' é um dos que tem a precedência mais baixa.
 (perldoc perlop por favor...)
 Ou seja, você pode fazer tudo que faz com '' com 'and', menos contar
 com short-circuit em condicionais ;)




 --
 Saravá,
 Renato CRON
 http://www.renatocron.com/blog/
 @renato_cron http://twitter.com/#!/renato_cron


 ___
 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-28 Por tôpico Blabos de Blebe
TRUCO!!!

perl -E '$a=0; 0 and $a=1; say $a'
perl -E '$a=0; say 0 and $a=1; say $a'

A pegadinha fica como exercício...



2012/11/28 Bruno Buss bruno.b...@gmail.com:
 Sim, o seu exemplo é a perfeita demonstração do que eu disse: a única
 diferença é que você não consegue fazer short-circuit com 'and', só com
 ''.

 A menos que o sinal de = e = agora tenha algum side-effect como o '++', eu
 não particularmente não consigo chegar numa linha razoável de raciocínio
 para reclamar do , and e precedências no if do Aureliano.

 [ ]'s

 2012/11/28 Renato Santos renato.c...@gmail.com

 Acho que o que o Marcio disse isso pois o and computa ambos os lados da
 expressão, para então retornar um boolean (ou continuar a sequencia de
 computar mais 'ands' e 'ors')


 $x = 0;
 $x and $x++; # $x = 1

 $y = 0;
 $y  $y++; # $y = 0


 perl -e 'use v5.14.0;use v5.14.0; my $m=0; say $m  $m++; say $m'
 0
 0

 perl -e 'use v5.14.0;use v5.14.0; my $m=0; say $m and $m++; say $m'
 0
 1


 o retorno foi o mesmo, mas o comportamento não.

 2012/11/28 Bruno Buss bruno.b...@gmail.com

 @Thiago e Marcio:
 O que vocês estão falando? Pelo amor de Larry...
 O operador 'and' é *exatamente* igual ao '', tirando o nível de
 precedência... onde o 'and' é um dos que tem a precedência mais baixa.
 (perldoc perlop por favor...)
 Ou seja, você pode fazer tudo que faz com '' com 'and', menos contar
 com short-circuit em condicionais ;)




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




 --
 Bruno C. Buss
 http://www.brunobuss.net

 ___
 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-28 Por tôpico Renato Santos
perl -MO=Deparse pra descobrir as pegadinhas

2012/11/28 Blabos de Blebe bla...@gmail.com

 TRUCO!!!

 perl -E '$a=0; 0 and $a=1; say $a'
 perl -E '$a=0; say 0 and $a=1; say $a'

 A pegadinha fica como exercício...



 2012/11/28 Bruno Buss bruno.b...@gmail.com:
  Sim, o seu exemplo é a perfeita demonstração do que eu disse: a única
  diferença é que você não consegue fazer short-circuit com 'and', só com
  ''.
 
  A menos que o sinal de = e = agora tenha algum side-effect como o
 '++', eu
  não particularmente não consigo chegar numa linha razoável de raciocínio
  para reclamar do , and e precedências no if do Aureliano.
 
  [ ]'s
 
  2012/11/28 Renato Santos renato.c...@gmail.com
 
  Acho que o que o Marcio disse isso pois o and computa ambos os lados da
  expressão, para então retornar um boolean (ou continuar a sequencia de
  computar mais 'ands' e 'ors')
 
 
  $x = 0;
  $x and $x++; # $x = 1
 
  $y = 0;
  $y  $y++; # $y = 0
 
 
  perl -e 'use v5.14.0;use v5.14.0; my $m=0; say $m  $m++; say $m'
  0
  0
 
  perl -e 'use v5.14.0;use v5.14.0; my $m=0; say $m and $m++; say $m'
  0
  1
 
 
  o retorno foi o mesmo, mas o comportamento não.
 
  2012/11/28 Bruno Buss bruno.b...@gmail.com
 
  @Thiago e Marcio:
  O que vocês estão falando? Pelo amor de Larry...
  O operador 'and' é *exatamente* igual ao '', tirando o nível de
  precedência... onde o 'and' é um dos que tem a precedência mais baixa.
  (perldoc perlop por favor...)
  Ou seja, você pode fazer tudo que faz com '' com 'and', menos contar
  com short-circuit em condicionais ;)
 
 
 
 
  --
  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
 
 
 
 
  --
  Bruno C. Buss
  http://www.brunobuss.net
 
  ___
  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 http://twitter.com/#!/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-28 Por tôpico Bruno Buss
Ok, estava errado sobre o short circuit =P

[ ]'s

2012/11/28 Blabos de Blebe bla...@gmail.com

 TRUCO!!!

 perl -E '$a=0; 0 and $a=1; say $a'
 perl -E '$a=0; say 0 and $a=1; say $a'

 A pegadinha fica como exercício...



 2012/11/28 Bruno Buss bruno.b...@gmail.com:
  Sim, o seu exemplo é a perfeita demonstração do que eu disse: a única
  diferença é que você não consegue fazer short-circuit com 'and', só com
  ''.
 
  A menos que o sinal de = e = agora tenha algum side-effect como o
 '++', eu
  não particularmente não consigo chegar numa linha razoável de raciocínio
  para reclamar do , and e precedências no if do Aureliano.
 
  [ ]'s
 
  2012/11/28 Renato Santos renato.c...@gmail.com
 
  Acho que o que o Marcio disse isso pois o and computa ambos os lados da
  expressão, para então retornar um boolean (ou continuar a sequencia de
  computar mais 'ands' e 'ors')
 
 
  $x = 0;
  $x and $x++; # $x = 1
 
  $y = 0;
  $y  $y++; # $y = 0
 
 
  perl -e 'use v5.14.0;use v5.14.0; my $m=0; say $m  $m++; say $m'
  0
  0
 
  perl -e 'use v5.14.0;use v5.14.0; my $m=0; say $m and $m++; say $m'
  0
  1
 
 
  o retorno foi o mesmo, mas o comportamento não.
 
  2012/11/28 Bruno Buss bruno.b...@gmail.com
 
  @Thiago e Marcio:
  O que vocês estão falando? Pelo amor de Larry...
  O operador 'and' é *exatamente* igual ao '', tirando o nível de
  precedência... onde o 'and' é um dos que tem a precedência mais baixa.
  (perldoc perlop por favor...)
  Ou seja, você pode fazer tudo que faz com '' com 'and', menos contar
  com short-circuit em condicionais ;)
 
 
 
 
  --
  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
 
 
 
 
  --
  Bruno C. Buss
  http://www.brunobuss.net
 
  ___
  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




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