On 31 août, 13:13, Ben Morrow <b...@morrow.me.uk> wrote: > Quoth tuser <tus...@gmail.com>: > > > Why is 2 ~~ '2.0' false in Perl 6 (case #A2), whereas the identical > > expression in Perl 5.10.1 (case #B2) is true ? > > > Or in other words: > > Why is there a rule in Perl 5.10.1 ("Num numish numeric equality"), > > where there is no equivalent in Perl 6 ? > > For a proper answer you would have to ask p5p Here is the question that goes to p5p: In Perl 6, I find the following about smart matching: http://perlcabal.org/syn/S03.html#Smart_matching $_ X Type of Match Implied Match if (given $_) ====== ===== ===================== =================== [...] Any Num numeric equality +$_ == X Any Str string equality ~$_ eq X [...] ====== ===== ===================== =================== That means in Perl 6: ===================== case #A1: 2 ~~ 2.0 translates into 2 == 2.0 ==> true case #A2: 2 ~~ '2.0' translates into 2 eq '2.0' ==> false In perl 5.10.1, I find the following about smart matching: http://search.cpan.org/~dapm/perl-5.10.1-RC1/pod/perlsyn.pod#Smart_matching_in_detail $a $b Type of Match Implied Matching Code ====== ===== ===================== ============= [...] Any Num numeric equality $a == $b Num numish[4] numeric equality $a == $b [...] Any Any string equality $a eq $b ====== ===== ===================== ============= [4] either a real number, or a string that looks like a number That means in Perl 5.10.1: ========================== case #B1: 2 ~~ 2.0 translates into 2 == 2.0 ==> true case #B2: 2 ~~ '2.0' translates into 2 == '2.0' ==> true The question I have is: Why is 2 ~~ '2.0' false in Perl 6 (case #A2), whereas the identical expression in Perl 5.10.1 (case #B2) is true ? Or in other words: Why is there a rule in Perl 5.10.1 ("Num numish numeric equality"), where there is no equivalent in Perl 6 ? > but I would guess it's so that something like > > my $x = 3; > print $x; > "3.0" ~~ $x; > > does what is expected. The 'print' statement has converted $x into a > dualvar, and there is no way to tell which part (string or number) came > 'first', so perl will treat it as a string. It's different from Perl 6 > because Perl 5's dynamic type system is quite different from Perl 6's.Thread Next