Erik Tews: Sub soll 2 Arrays zurückgeben

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.

  1. 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