Struppi: deep copy versus shallow copy

Beitrag lesen

Hallo liebe Perl Freunde,

Ich habe ein Problem mit einer Schleife, in der ich eine Umgebungsvariable einlese ($_id):

@all_ids = ();
get "id == *", "links";
while (get_next("links")){
push (@all_ids, $_id);
}

Am Ende steht immer ein und derselbe Wert in meinem Array, weil durch push (@all_ids, $_id); immer nur "shallow copies" in das Array geschoben werden und der letzte gültige Wert von $_id sich dann quasi überall befindet, weil nur Referenzen existieren.

Aus deinem Beispile läßt sich nicht erkennen, was für ein Typ $_id ist.
Du musst beim Push nur einen Datenyp dieser Art erzeugen.

Wie mache ich (und jetzt kommt das Problem) ohne zusätzliche require/use Anweisungen zu gebrauchen, eine "deep copy" von $_id?

Was hast du den gegen use? Die Verfügbarkeit von Modulen ist eine der größten Stärken von Perl.

Für jede gute Erklärung bin ich sehr dankbar. Ich habe zwar die ein oder andere Perl Seite gefunden, die sich mit deep copies beschäftigt, aber ich verstehe nicht, warum ein so tiefgehendes Konzept immer gleich an Mummutbeispielen mit Hashes und ewig vielen Einträgen erklärt werden muss...

Naja, wenn du einen skalar von einem komplexen Datentyp auf ein Array pushst, dann wird halt nur der Skalar also die Referenz verwendet, wenn du etwas anderes willst musst du es Perl sagen.

Struppi.