if the code is in the exact sequence as you put it, then the matches implicitly test against $_ (i think) which would be assigned in each previous statement. and as these matches are bare (used as LValue), with the result not being assigned to anything, the outcome of matching each array element content against $_ is converted to a scalar or possibly even boolean. the second test, where you have no "m" in front of the quoted string becomes the value of the string.