ich weiss gar nicht, wo ich anfangen soll...
eine subroutine solltest du nicht exit nennen. es sei denn, du möchtest die leser/pfleger deiner software verwirren.
my var $x;
-> fehlermeldung
No such class var
my $b = &test
subroutinen sollte man im normalfall so aufrufen:
test()
das & hat bestimmte nebeneffekte, die du nicht unbedingt möchtest.
zum thema "Wie kann ich die Funktion exit in der Funktion test aufrufen":
mir ist die frage nicht ganz klar.
also die problematik ist, du möchtest vermeiden, die funktion exit() selber an mehreren stellen aufzurufen und das gleich von test() erledigen lassen.
das ist kein problem.
rufe die funktion exit() also in der funktion test() auf, so wie es der jetzigen funktionalität entspräche.
wenn ich nach deinem pseudocode urteile:
sub test{
return somethig;
}
müsstest du z.b. schreiben:
sub test {
my $x = somethig;
exit($x, $y) if $x;
return $x;
}
idealerweise übergibst du dazu die variablen $x und $y.
zum thema, dass du keine variablen übergeben möchtest und globale variablen benutzen willst:
mach es nicht.
ich kann dir aus langjähriger erfahrung sagen, dass das faulheit an der falschen stelle ist.
ich musste eine applikation refakturieren, die hunderte globaler variablen benutzte. man hatte keinen überblick, welche variable wo wann von wem benutzt/geändert wurde.
und da zeigt sich auch schon das problem.
beim schreiben mag man denken, lieber global, dann muss ich nicht so viel tippen.
nach einem vierteljahr guckst du dir dein programm an, willst was verändern und denkst, mist, ich blick nicht mehr durch.
wenn du viele variablen zu übergeben hast, dann solltest du die nicht global machen, sondern sie in eine datenstruktur packen. evtl. empfiehlt sich auch gleich objektorientierung.
so oder so empfehle ich erstmal die lektüre von z.b. "Modern Perl - The Book", zu finden hier:
http://perl-tutorial.org/