In scalar context, there's the same warning messages. There's also the next piece of the puzzle: 1E0.
Going back to the Range Operators doco, the evaluation of "a" == $. is actually int("a") == int($.):

So, int("a") == int($.) evaluates to 0 == 0 (which is obviously TRUE).
There's also the first two of the four warning messages; repeating for "g" would give the other two messages.
Therefore, both the left and right operands of .. evaluate as TRUE; and so, the whole expression "a" .. "g" also evaluates as TRUE.

"The value returned is either the empty string for false, or a sequence number (beginning with 1) for true. The sequence number is reset for each range encountered. The final sequence number in a range has the string "E0" appended to it, which doesn't affect its numeric value, ..."

So, as the range was only encountered once, the value returned is 1E0 which has a numerical value of 1. For anyone unfamiliar with that: