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