http://qs321.pair.com?node_id=1211007


in reply to Simple Q. for You

There's a lot going on. It kind of does what it reads like it should do in English, return 1 if (this and that). If either this or that is not true, keep going and do not return 1. That's pretty much what you need to know to use it effectively and correctly. The first condition is probably there just to avoid a nasty warning you'll get if foo is undefined.

But hey, let's complicate things. You have a postfix conditional followed by a boolean context evaluation with two conditions. If the first condition is true, evaluate the second. If they both evaluate to true, the whole evaluation is true and then you can return 1.

The first condition checks if  $d->{foo} is true or false. You're dereferencing foo out of scalar variable $d first, if that is either the number 0, 'the strings 0 or "", the empty list, or undef, it's false.

If the first condition is false, the && returns false for the evaluation and does not evaluate the second condition.

The second condition is a regular expression match to decide if $d->{foo} contains the letter x in either uppercase or lowercase.