Frank Schönmann: Paramter in Subroutine in eigenem Modul auslesen

Beitrag lesen

hi!

wie lese ich eigentlich am besten an eine SubRoutine übergebene
Parameter in einem eigenen Modul in Perl aus?

Also normalerweise ist es wirklich so, dass du die Parameter einfach
in der richtigen Reihenfolge übergibst. Falls du das aber nicht
möchtest, solltest du es vielleicht so lösen, wie das auch in einigen
Standard-Perl-Modulen gelöst wird. Zum Beispiel beim CGI-Modul sieht
das folgendermaßen aus:

print $query->popup_menu(-name    => 'menu_name',
                            -values  => ['eenie','meenie','minie'],
                            -default => 'meenie',
                            -labels  => %labels);

Ist also schon ein bisschen ähnlich deinem Versuch: die Keys werden
mit einem - davor geschrieben, der direkt folgende Parameter ist
dann der Wert (=> ist in Perl ein einfaches Synonym für ein Komma).

Im CGI-Modul wird das mit einer Hilfsmethode rearrange() gelöst, die
alle Parameter der Subroutine übergeben bekommt, zusammen mit einer
Art Format-String, die beschreibt, in welcher Reihenfolge die
Parameter zurückgegeben werden sollen.

Die Funktion rearrange() wird dann in jeder eigenen Subroutine
aufgerufen. Je nachdem, ob die Parameter als Liste, als Hash oder
in obigem Format übergeben wurden, werden sie dann neu geordnet, und
als Liste zurückgegeben, die auf die gewünschten lokalen Variablen
verteilt werden kann.

Da das CGI-Modul wohl bei den meisten Perl-Distributionen dabei ist,
kannst du ja selbst mal in den Quellcode von CGI.pm und CGI/Util.pm
schauen, um dir ein Bild davon zu verschaffen, wie diese Methode
anzuwenden ist.

bye, Frank!