Le Tue, 01 Nov 2011 08:18:27 -0700, Klaus a écrit:
Par contre, j'ai utilisé ' 3' ~~ '3' ce qui traduit dans le cas 32. "Any Any" ==> string equality $a eq $b du tableau http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
Dans ce cas ça doit être un bug de smart match, puisque ça ne correspond pas à ce qu'on obtient ( ' a' ~~ 'a', en l'occurence c'est facile à vérifier).
-- Ce qu'il y a d'enivrant dans le mauvais goût c'est le plaisir aristocratique de déplaire. C. Baudelaire.
Le Tue, 01 Nov 2011 08:18:27 -0700, Klaus a écrit:
Par contre, j'ai utilisé ' 3' ~~ '3' ce qui traduit dans le cas 32. "Any
Any" ==> string equality $a eq $b du tableau
http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
Dans ce cas ça doit être un bug de smart match, puisque ça ne correspond
pas à ce qu'on obtient ( ' a' ~~ 'a', en l'occurence c'est facile à
vérifier).
--
Ce qu'il y a d'enivrant dans le mauvais goût c'est le plaisir
aristocratique de déplaire.
C. Baudelaire.
Le Tue, 01 Nov 2011 08:18:27 -0700, Klaus a écrit:
Par contre, j'ai utilisé ' 3' ~~ '3' ce qui traduit dans le cas 32. "Any Any" ==> string equality $a eq $b du tableau http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
Dans ce cas ça doit être un bug de smart match, puisque ça ne correspond pas à ce qu'on obtient ( ' a' ~~ 'a', en l'occurence c'est facile à vérifier).
-- Ce qu'il y a d'enivrant dans le mauvais goût c'est le plaisir aristocratique de déplaire. C. Baudelaire.
Klaus
On 1 nov, 17:30, Emmanuel Florac wrote:
Le Tue, 01 Nov 2011 08:30:12 -0700, Klaus a écrit:
> Actuellement, il y a un développement en cours (Perl 5.14 / Perl 5.15 ) > qui essaie de corriger les problèmes de given/when par un nouveau > module: > voir >https://groups.google.com/group/perl.perl5.porters/msg/c869d4e8b7fe5d88?
hl=fr
De ce que j'en comprends c'est plutôt le smart match qui pose problèm e.
Dans mon cas, oui, c'est le smart match qui pose le problème. Mais il y a beaucoup de problèmes supplémentaires qui touchent le smart match et la fonctionnalité given/when en même temps, par exemple: https://groups.google.com/group/perl.perl5.porters/msg/b529f00b0566466b?hl =fr
These first two statements about it each put the lie to the other: . | Most of the power comes from implicit smart matching: | when($foo) | is exactly equivalent to | when($_ ~~ $foo) vs: | Most of the time, "when(EXPR)" is treated as an implicit | smart match of $_, i.e. "$_ ~~ EXPR". . Those cannot both be true. And they are not. The first is lying. The second is insufficient, even with elaboration, to explain what is really going on.
Donc il est raisonnable de traiter les problèmes given/when et les problèmes de smart match en même temps.
On 1 nov, 17:30, Emmanuel Florac <eflo...@imaginet.fr> wrote:
Le Tue, 01 Nov 2011 08:30:12 -0700, Klaus a écrit:
> Actuellement, il y a un développement en cours (Perl 5.14 / Perl 5.15 )
> qui essaie de corriger les problèmes de given/when par un nouveau
> module:
> voir
>https://groups.google.com/group/perl.perl5.porters/msg/c869d4e8b7fe5d88?
hl=fr
De ce que j'en comprends c'est plutôt le smart match qui pose problèm e.
Dans mon cas, oui, c'est le smart match qui pose le problème. Mais il
y a beaucoup de problèmes supplémentaires qui touchent le smart match
et la fonctionnalité given/when en même temps, par exemple:
https://groups.google.com/group/perl.perl5.porters/msg/b529f00b0566466b?hl =fr
These first two statements about it each put the lie to the other:
.
| Most of the power comes from implicit smart matching:
| when($foo)
| is exactly equivalent to
| when($_ ~~ $foo)
vs:
| Most of the time, "when(EXPR)" is treated as an implicit
| smart match of $_, i.e. "$_ ~~ EXPR".
.
Those cannot both be true. And they are not. The first is lying.
The second is insufficient, even with elaboration, to explain what
is really going on.
Donc il est raisonnable de traiter les problèmes given/when et les
problèmes de smart match en même temps.
Le Tue, 01 Nov 2011 08:30:12 -0700, Klaus a écrit:
> Actuellement, il y a un développement en cours (Perl 5.14 / Perl 5.15 ) > qui essaie de corriger les problèmes de given/when par un nouveau > module: > voir >https://groups.google.com/group/perl.perl5.porters/msg/c869d4e8b7fe5d88?
hl=fr
De ce que j'en comprends c'est plutôt le smart match qui pose problèm e.
Dans mon cas, oui, c'est le smart match qui pose le problème. Mais il y a beaucoup de problèmes supplémentaires qui touchent le smart match et la fonctionnalité given/when en même temps, par exemple: https://groups.google.com/group/perl.perl5.porters/msg/b529f00b0566466b?hl =fr
These first two statements about it each put the lie to the other: . | Most of the power comes from implicit smart matching: | when($foo) | is exactly equivalent to | when($_ ~~ $foo) vs: | Most of the time, "when(EXPR)" is treated as an implicit | smart match of $_, i.e. "$_ ~~ EXPR". . Those cannot both be true. And they are not. The first is lying. The second is insufficient, even with elaboration, to explain what is really going on.
Donc il est raisonnable de traiter les problèmes given/when et les problèmes de smart match en même temps.
Klaus
On 1 nov, 17:32, Emmanuel Florac wrote:
Le Tue, 01 Nov 2011 08:18:27 -0700, Klaus a écrit:
> Par contre, j'ai utilisé ' 3' ~~ '3' ce qui traduit dans le cas 32. " Any > Any" ==> string equality $a eq $b du tableau >http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
Dans ce cas ça doit être un bug de smart match, puisque ça ne corre spond pas à ce qu'on obtient ( ' a' ~~ 'a', en l'occurence c'est facile à vérifier).
Pour être précis, les cas ' 3' ~~ '3' est positif uniquement parce que la chaîne de caractères ' 3' a été utilisé dans un printf ("...my $test = sprintf '%d', $thing;..."). Je précise bien que la chaîne de caractères ' 3' reste une chaîne de caractères ' 3'.
use strict; use warnings; use 5.010; use Test::More tests => 2; for my $thing ('3', ' 3') { my $test = sprintf '%d', $thing; my $result = ''; given ($thing) { when ('3') { $result .= "[3]"; continue; } when (' 3') { $result .= "[ 3]"; continue; } } is ($result, "[$thing]", "Test [$thing]"); }
Je souhaite juste rajouter que le bug ' 3' ~~ '3' est documenté dans http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
30. Num numish[4] numeric equality $a == $b
C'est à dire le sprintf a provoqué que la chaîne de caractères ' 3' est considéré comme numérique, donc règle 30. devient active et provoque une comparaison ' 3' == '3'.
A mon avis, le vrai bug est la règle 30. Si cette règle n'existait pas, le problème ' 3' ~~ '3' serait résolu.
On 1 nov, 17:32, Emmanuel Florac <eflo...@imaginet.fr> wrote:
Le Tue, 01 Nov 2011 08:18:27 -0700, Klaus a écrit:
> Par contre, j'ai utilisé ' 3' ~~ '3' ce qui traduit dans le cas 32. " Any
> Any" ==> string equality $a eq $b du tableau
>http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
Dans ce cas ça doit être un bug de smart match, puisque ça ne corre spond
pas à ce qu'on obtient ( ' a' ~~ 'a', en l'occurence c'est facile à
vérifier).
Pour être précis, les cas ' 3' ~~ '3' est positif uniquement parce que
la chaîne de caractères ' 3' a été utilisé dans un printf ("...my
$test = sprintf '%d', $thing;..."). Je précise bien que la chaîne de
caractères ' 3' reste une chaîne de caractères ' 3'.
use strict;
use warnings;
use 5.010;
use Test::More tests => 2;
for my $thing ('3', ' 3') {
my $test = sprintf '%d', $thing;
my $result = '';
given ($thing) {
when ('3') { $result .= "[3]"; continue; }
when (' 3') { $result .= "[ 3]"; continue; }
}
is ($result, "[$thing]", "Test [$thing]");
}
Je souhaite juste rajouter que le bug ' 3' ~~ '3' est documenté dans
http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
30. Num numish[4] numeric equality $a == $b
C'est à dire le sprintf a provoqué que la chaîne de caractères ' 3'
est considéré comme numérique, donc règle 30. devient active et
provoque une comparaison ' 3' == '3'.
A mon avis, le vrai bug est la règle 30. Si cette règle n'existait
pas, le problème ' 3' ~~ '3' serait résolu.
Le Tue, 01 Nov 2011 08:18:27 -0700, Klaus a écrit:
> Par contre, j'ai utilisé ' 3' ~~ '3' ce qui traduit dans le cas 32. " Any > Any" ==> string equality $a eq $b du tableau >http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
Dans ce cas ça doit être un bug de smart match, puisque ça ne corre spond pas à ce qu'on obtient ( ' a' ~~ 'a', en l'occurence c'est facile à vérifier).
Pour être précis, les cas ' 3' ~~ '3' est positif uniquement parce que la chaîne de caractères ' 3' a été utilisé dans un printf ("...my $test = sprintf '%d', $thing;..."). Je précise bien que la chaîne de caractères ' 3' reste une chaîne de caractères ' 3'.
use strict; use warnings; use 5.010; use Test::More tests => 2; for my $thing ('3', ' 3') { my $test = sprintf '%d', $thing; my $result = ''; given ($thing) { when ('3') { $result .= "[3]"; continue; } when (' 3') { $result .= "[ 3]"; continue; } } is ($result, "[$thing]", "Test [$thing]"); }
Je souhaite juste rajouter que le bug ' 3' ~~ '3' est documenté dans http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
30. Num numish[4] numeric equality $a == $b
C'est à dire le sprintf a provoqué que la chaîne de caractères ' 3' est considéré comme numérique, donc règle 30. devient active et provoque une comparaison ' 3' == '3'.
A mon avis, le vrai bug est la règle 30. Si cette règle n'existait pas, le problème ' 3' ~~ '3' serait résolu.
Emmanuel Florac
Le Tue, 01 Nov 2011 10:38:16 -0700, Klaus a écrit:
A mon avis, le vrai bug est la règle 30. Si cette règle n'existait pas, le problème ' 3' ~~ '3' serait résolu.
Allons plus loin, le smart match est un problème dans beaucoup de cas, ce n'est jamais très clair. Je pense que c'est bien le smart match qui est une fonctionnalité complètement ratée, pas vraiment le given/when.
-- "If you're not paying for it, you're not the customer; you are the product being sold."
Le Tue, 01 Nov 2011 10:38:16 -0700, Klaus a écrit:
A mon avis, le vrai bug est la règle 30. Si cette règle n'existait pas,
le problème ' 3' ~~ '3' serait résolu.
Allons plus loin, le smart match est un problème dans beaucoup de cas, ce
n'est jamais très clair. Je pense que c'est bien le smart match qui est
une fonctionnalité complètement ratée, pas vraiment le given/when.
--
"If you're not paying for it, you're not the customer; you are
the product being sold."
Le Tue, 01 Nov 2011 10:38:16 -0700, Klaus a écrit:
A mon avis, le vrai bug est la règle 30. Si cette règle n'existait pas, le problème ' 3' ~~ '3' serait résolu.
Allons plus loin, le smart match est un problème dans beaucoup de cas, ce n'est jamais très clair. Je pense que c'est bien le smart match qui est une fonctionnalité complètement ratée, pas vraiment le given/when.
-- "If you're not paying for it, you're not the customer; you are the product being sold."