Hallo Christoph,
sub input {
if ($cgi->param('antwort')) {
$origdatum = $cgi->param('origdatum');
$origname = $cgi->param('origname');
$origemail = $cgi->param('origemail');
$origurl = $cgi->param('origurl');
$origthema = $cgi->param('origthema');
} else {
Wenn Du die Funktion "input" in der Datei aufrufst, in der Du die Variable $cgi Deklariert hast, liegt diese im selben Namensraum (oder darunter) und funktioniert somt auch.
Liegt diese Funktion jedoch in einer anderen Datei, liegt diese auch außerhalb des Geltungsbereiches der Variable $cgi. Somit findet Perl die Methode param für das $cgi-Objekt auch nicht.
Generell sollte man bei einem modularen Programmaufbau darauf achten, dass die einezelnen Programmteile auch wirklich Modular sind, und nicht voneinander abhängen.
Das machst Du z.B. damit, dass Du der Funktion alle benötigten Variablen und Methoden übergibst. In deinem Beispiel:
sub input {
my $cgi = shift;
if ($cgi->param('antwort')) {
$origdatum = $cgi->param('origdatum');
$origname = $cgi->param('origname');
$origemail = $cgi->param('origemail');
$origurl = $cgi->param('origurl');
$origthema = $cgi->param('origthema');
}
}
Aufruf der Funktion:
input( $cgi );
Du übergibst das CGI-Objekt also per Variable an deine Funktion, in der Du dann auf alle weiteren Methoden des CGI-Objektes zugriff hast.
Wenn Du dieses Konziquent durchziehst, hast Du eine schöne Sammlung an Funktionen, die Du je nach Bedarf in deine Programme einbinden kannst, ohne das es Konflikte gibt.
Damit Du später wieder weist, was Du deiner Funktion alles zu übergeben hast, macht es Sinn alles schön sauber zu Dokumentieren.
Die nützlichsten Module werden dann unter www.cpan.org ausgestellt ;)
Gruß
Helmut Weber
-------------------------------------------
Mode ist eine Variable, Stil eine Konstante