The '.' matches a single character, any character, except \n (unless using the 's' modifier, to treat the expression as a single line). There are two ways to solve the problem, one is how you did it, and another is to use /\Q$key2/ as others have said, so the '.' is treated as a literal '.' (along with every other metacharacter).
$key =~ m/^$key2$/; # works $key =~ m/\Q$key2/; # also works
Personally I think the second option is better here. The '.' normally matches the literal '.' and anything else as well, but if your $key contained something like "INITIAL!LASTNAME" it would match if "INITIAL.LASTNAME" where the pattern. Quoting metacharacters with \Q$pattern\E is, at least, more correct, even if the first will work ok with the given input. It'll help you avoid bugs to use the second option.
72656B636148206C72655020726568746F6E41207473754A
In reply to RE: Re: pattern matching: why does the following code evaluate true? (and how do i fix it?)
by reptile
in thread pattern matching: why does the following code evaluate true? (and how do i fix it?)
by Buckaroo Buddha
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |