Hallo,
Wie kann man zwei Variablen von einem Unterprogramm übernehmen??
Das funktioniert nicht!
sub Datenaufbereitung
»» {
local @formularfelder;
local ($name, $daten, $input);$input = $_[0];
@formularfelder = split(/&/, $input);foreach $feld (@formularfelder)
{
($name, $daten) = split(/=/, $feld);
$daten =~ s/+/ /go;
$daten =~ s/%(..)/pack("C", hex($1))/eg;
@d[$i] = $daten;
@c[$i] = $name;
$i = $i + 1;
}return (@d,@c);
»» }
($aufdaten,$b)=&Datenaufbereitung($daten); # 2 Variablen!
Danke
Grundsätzlich können Funktionen in Perl Listen von Werten zurückliefern:
sub wasauchimmer
{
return (1,2,3);
}
($a,$b,$c) = &wasauchimmer;
print "$a,$b,$c";
liefert das erwartete Ergebnis. Die Ausgabe ist "1,2,3".
Wunderbar, oder?
Es geht auch so:
sub wasauchimmer
{
my(@array);
$array[0] = 1;
$array[1] = 2;
$array[2] = 3;
return @array;
}
bei der Rückgabe von zwei Arrays funktioniert das gantze nicht mehr, da beide Listen quasi zu einem verschmolzen werden, da Perl nur _eine_ Liste zurückgibt.
Allerdings willst Du ja auch nru, daß die aufrufende Funktion oder das Hauptprogramm eine Zuordnung zwischen den Namen und den Daten hat. Dafür kennt Perl auch die Lösung. Das ganze nennt sich Hash.
sub Datenaufbereitung
{
hier habe ich mal zusammengefaßt ;-)
my (@formularfelder) = split(/&/, $_[0]);
das hier ist neu
my(%params);
hier habe ich nur das wesentliche geändert,
Puristen mögen mir verzeihen
foreach $feld (@formularfelder)
{
my($name, $daten) = split(/=/, $feld);
$daten =~ s/+/ /go;
$daten =~ s/%(..)/pack("C", hex($1))/eg;
$params{$name} = $daten;
}
return(%params);
}
%formulardaten = &Datenaufbereitung($daten);
So. Zugreifen kannst Du dann auf die Werte mit (VORNAME soll hier als einer der Namen genommen werden, die in den forumlarfeldern vorgekommen sind.
print $forumlardaten{VORNAME};
Ich hoffe, das ist jetzt auch geklärt.
Und nun zum letzten. ICh denke, das was dieser Code macht, ist Formulardaten aus einem HTML-Formular für die weitere Bearbeitung aufzubereiten.
Aber dafür gibt es ein weltweit unzählige Male eingesetztes Modul zu Perl: CGI.pm
Dasa erledigt das ganze für dich und bietet noch unheimlich viel nützliches.
Also:
perldoc CGI
und staunen. Das hat alles schon jemand für Dich ausprogrammiert, ist normalerweise schon auf Deiner Festplatte und wartet geduldi, daß Du es benutzt.
Schönes Wochenende noch
Klaus