if ($homeurl !~ m[^http://|https://]) {
Careful. Your regex tests for http:// at the start of the string, or https:// anywhere in the string. The |-alternative is greedy if not enclosed in brackets. Also, it is better to keep or distinctions like this outside the regex engine.
In reply to the original question, I would suggest that it's semantically much better to write this as:
unless ($homeurl =~ m[^http://] or $homeurl =~ m[^https://]) {
&inerror("Your home url has to start with http:// or https://");
}
which to me feels like it more clearly conveys what's meant here.
Finally, though, I want to suggest, in this specific instance, to use the ? quantifier:
unless ($homeurl =~ m[^https?://]) {
&inerror("Your home url has to start with http:// or https://");
}
____________Makeshifts last the longest.