Thread übergabe Sub: parameter an Sub übergeben (12 answers)
Opened by Rambo at 2004-02-12 18:22

Crian
 2004-02-13 13:16
#80052 #80052
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
[quote=Strat,12.02.2004, 17:41]Wenn du elemente der Uebergabeparameterliste @_ direkt veraenderst, veraenderst du die uebergebenen Werte (call by reference). Wenn du etwas herauskopierst my ($a1, $z1), dann bekommst du lokale Variablen und Werte, die nur innerhalb der sub existieren (Call by value) (Ausnahme: Referenzen!)[/quote]
Nicht wirklich, auch die Referenzen werden kopiert, aber das was an einer Referenz interessiert, ist nicht die Adrresse der Referenz (die unterscheidet sich), sondern der Inhalt (nämlich die Adresse dessen, auf was die Referenz verweist).

Indofern hast Du einerseits Recht: wenn man eine Referenz übergibt und sie mit my rauskopiert und dann an dem Objekt etwas ändert, dann ist die Änderung auch in dem aufrufenden Programm zu sehen.

Andererseits aber auch nicht: Denn wenn ich der Referenz einen anderen Wert zuweise (etwa undef), ist das für die aufrufende Funktion völlig unerheblich, deren Referenz verweist immer noch auf das Objekt.

Wenn ich allerdings die übergebene Referenz nicht kopiere (mit my $ref = shift; o.ä.) und auf undef setze (etwa mit $_[0] = undef), dann verweist auch die Referenz des Aufrufers nicht mehr auf das Objekt (und es kann ggf. von der Garbage Collection eingesammelt werden, falls es keine anderen Verweise darauf gibt).

Aber zugegebener Maßen ist das vielleicht nicht der einsteigergeeignetste Hinweis. Aber vielleicht ist er zum Verständnis dennoch nützlich.

(Wobei er nicht an Dich ist @strat, bei Dir gehe ich davon aus, dass ich Dir nicht viel neues erzählen kann, weder in diesem noch in anderen Posts ;-)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread übergabe Sub: parameter an Sub übergeben