in reply to Multiple matching using m///

Here's the best way I know to match a string which contains a substring AND another substring:
$_ = 'I threw the balls through the rings and won a prize!'; print "Gotcha!\n" if /^(?=.*balls)(?=.*rings)/s;
The first lookahead will match 'balls' anywhere in the string; the second will match 'rings' anywhere in the string. Note that it doesn't matter whether 'balls' or 'rings' appears first.

If you want to match another substring, you can just add another lookahead assertion.

I recall that I picked this one up from Abigail.