in reply to Operator precedence

Looking at perlop, you will see that lc, a named unary operator, is lower in precedence than the binding (pattern match) operator, "=~". So your second example is actually evaluated as:
if (lc ($foo =~ (lc $bar))
Operator precedence can be a tricky thing, and it usually bites you in the posterior just when you think you've got it down.
   MeowChow                                   
               s aamecha.s a..a\u$&owag.print