Or maybe he can write a perl script to check the "if/while" conditionals of his perl script...
while(<>){ say '= is detected where == is expected at line ',"$." if /if\s*\(\S+?=[^=]/; } On 15 Aug 2013, at 03:02, Rob Dixon <rob.di...@gmx.com> wrote: > On 14/08/2013 18:21, Alexey Mishustin wrote: >> >> If I make a typo and write a single "equals" operator here: >> >> if ($foo = 2) { >> print "yes\n"; >> } >> >> ...then the "warnings" pragma works OK and tells me "Found = in >> conditional, should be ==..." >> >> But if I make the same typo and write a single "equals" operator there: >> >> if ($foo = $bar) { >> print "yes\n"; >> } >> >> ... then I get no warning; the script output is "yes". >> >> Why is it so? >> >> How could I catch such typos? > > The `warnings` pragma catches the first form because the value of the > conditional is a *constant* 2, so the body of the `if` will *always* be > executed and it is a fair guess that the problem is `=` instaed of `==`. > > In the second case the execution depends on the value of `$bar`, and it > is a reasonable thing to write if, say, you wanted to test a value and > assign it to a temporary variable at the same time. Perl cannot know > that the code was unintentional and will not warn you. > > I have checked both Perl::Critic and B::Lint, and neither of these check > for an assignment operator in a conditional expression. The only thing > way I can think of doing this is to write a plugin for B::Lint, which > accepts Module::Pluggable plugins. It may be possible to write something > that will do what you want. > > Rob > > > -- > To unsubscribe, e-mail: beginners-unsubscr...@perl.org > For additional commands, e-mail: beginners-h...@perl.org > http://learn.perl.org/ > >