So here it is with bonus, just a little longer... And now, its just a little faster than yours. Except on large identical strings where it is 3 times faster because of the first line. Without it the regexp would perform very slow.
sub comp {
return -1 if $_[0] eq $_[1];
local $_ = $_[0] ^ $_[1];
/^([\x00]*)([^\x00])\2[\x00]*$/;
$1 ? length$1 : -1;
}