mit == vergleicht man in perl zahlen, keine zeichenketten.
if ($page eq 'meinedaten') {
require ...
in meinedaten.cgi scheinst du irgendwo ein exit stehen zu haben; dort wird naemlich zu dem zeitpunkt, wo das require ausgefuehrt wird, der code ausgefuehrt, der dort nicht durch subroutinen geschuetzt ist, also auch dein exit.
require hat IMHO bei mod_perl-Scripten nichts verloren; use ist wesentlich effizienter, du musst das script halt nur in ein Perl-Modul konvertieren. und wenn du ein externes script ausfuehren willst (das meinedaten.cgi), dann ist require der voellig falsche weg, sondern besser system, backticks oder aehnliches verwenden.