# New Ticket Created by  Bruce Gray 
# Please include the string:  [perl #127206]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=127206 >


Summary: The useful warning in Perl 5:
    Found = in conditional, should be == at ...
is absent in Rakudo. Although its omission was originally intentional,
the warning can be added to Rakudo in a more restricted form,
catching most of the programmer errors that the Perl 5 warning caught,
while still allowing valid code without complaint.


$ perl6 --version
        This is Rakudo version 2015.12-140-gf1dd491 built on MoarVM version 
2015.12
        implementing Perl 6.c.

$ perl6 -e 'my $foo = 3; if $foo = 4 { say "overwrote!" }; say $foo;'
        overwrote!
        4

$ perl -wE 'my $foo = 3; if ($foo = 4) { say "overwrote!" }; say $foo;'
        Found = in conditional, should be == at -e line 1.
        overwrote!
        4

http://irclog.perlgeek.de/perl6/2016-01-07#i_11848637
< Util> m: my $foo = 3; if $foo = 4 { say 'overwrote!' }; say $foo;
<+camelia> rakudo-moar ed6ec7: OUTPUT«overwrote!␤4␤»
< Util> In Perl 5, with warnings enabled, I would have been warned:
< Util>     Found = in conditional, should be == at ...
< Util> Rakudo does not give this warning. Is this just NYI, or deliberate?
< TimToady> deliberate
< diakopter> I would think it should warn if it's a constant being assigned, 
but not otherwise
< diakopter> non-True constant
< diakopter> *True constant
< TimToady> yes, we could warn if the RHS is constant
< Util> TimToady: The lack of warning surprised me. 
< Util> I am following up for a member of Atlanta.pm, who was bitten by this 
change
< Util> during early Perl 6 experimenting.
 * TimToady finds the spurious warning to be irritating on something like: 
while $this = getnextone() { ... }
< TimToady> though there's less excuse for that construct in Perl 6 than in 
Perl 5
< Util> TimToady: but you have given us: while getnextone() -> $this { ... }
< TimToady> since we can write: while getnextone() -> $this { ... }
< TimToady> otoh, what if you want the final $this after the loop?
< TimToady> and the failure mode of 'always true' is usually pretty obvious
< TimToady> so I tend to approach this one from the side of "don't rule out 
valid code"
< Util> 'always false' looks obvious too
< Util> +1 on "don't rule out valid code".
< Util> "warn if the RHS is constant" would catch many errors.

— 
Thank you,
Bruce Gray (Util on IRC)


Reply via email to