Sub soll 2 Arrays zurückgeben
Erik Tews
- perl
Hi
Ich hab hier ein warscheinlich relativ einfaches Problem. Ein Sub soll 2
Arrays zurückgeben. Ich hab es schon mal mit folgendem versucht:
sub test
{
@test_1 = ("Test1", "Test2");
@test_2 = ("Test3", "Test4");
return (@test_1, @test_2);
}
($temp1, $temp2) = &test;
@Array1 = @$temp1;
@Array2 = @$temp2;
Das geht zwar, aber der Syntax beim auslesen von der Rückgabe von &test
ist doch irgendwie etwas kompliziert. Geht das auch in einer Zeile?
Und noch was, wenn ich das richtig verstehe, würde das nicht
funktionieren, wenn die Arrays in dem Sub mit my erzeugt werden, da sie
ja dann beim verlassen gelöscht werden. Kennt da wer noch ne bessere
Möglichkeit? Am liebsten wäre mir was in der Art von return (@Array1,
@Array2), und dann (@Array1, @Array2) = &test; Aber das geht ja leider
nicht.
Hallo Erik
Ich hab hier ein warscheinlich relativ einfaches Problem. Ein Sub soll 2
Arrays zurückgeben. Ich hab es schon mal mit folgendem versucht:
Vielleicht funktioniert das: Erzeuge die Arrays im aufrufenden
Programm, und übergib diese als Referenzen. Dann kannst Du sie
ja im Unterprogramm beliebig füllen.
my (@Array1, @Array2);
&test(@Array1,@Array2);
sub test {
my ($Array1, $Array2) = @_;
@$Array1 = ("Test1", "Test2");
@$Array2 = ("Test3", "Test4");
return 1; # oder was immer Du willst ;-)
}
Das geht zwar, aber der Syntax beim auslesen von der Rückgabe von &test
ist doch irgendwie etwas kompliziert. Geht das auch in einer Zeile?
So wie oben siehts doch jetzt einfacher aus *g*. Ich hab`s aber nicht probiert.
Das war nur eine spontane Idee zur Vereinfachung. Vielleich weis ja der Eine oder Andere
noch eine weitere Lösung.
Und noch was, wenn ich das richtig verstehe, würde das nicht
funktionieren, wenn die Arrays in dem Sub mit my erzeugt werden, da sie
ja dann beim verlassen gelöscht werden. Kennt da wer noch ne bessere
Möglichkeit?
Ich glaube mal gelesen zu haben, daß Perl sich auch my-Variablen weiterhin merkt,
solagen eine Referenz darauf besteht. (hoffentlich stimmt das auch <schwitz> ;-)
Viel Spaß damit
AlexBausW