Hallo,
mir ist da etwas aufgefallen, folgendes Bsp.:
#!/usr/bin/perl sub a { $_[0] =~ s/F/D/g; } my $b = "FFJFF"; a($b); print $b;
DDJDD
Ich dachte, ich würde die Variable $b per value übergeben. Anscheinend nicht. Warum?
Anmeldungsdatum: Beiträge: 1148 |
Hallo, mir ist da etwas aufgefallen, folgendes Bsp.: #!/usr/bin/perl sub a { $_[0] =~ s/F/D/g; } my $b = "FFJFF"; a($b); print $b;
Ich dachte, ich würde die Variable $b per value übergeben. Anscheinend nicht. Warum? |
Anmeldungsdatum: Beiträge: 2159 |
Saddy schrieb:
Weil Perl alles mittels Call-by-Reference übergibt. Wenn du mit Kopien arbeiten möchtest musst du "@_" entpacken. my ( $foo, $bar, $baz ) = @_; |
(Themenstarter)
Anmeldungsdatum: Beiträge: 1148 |
Oha. Dann ist das hier http://www.privatrecht.sbg.ac.at/perl-tutorial/perl/perl_ref.html falsch erklärt. |
Anmeldungsdatum: Beiträge: 2159 |
Saddy schrieb:
Ja ist es. Perl nutzt intern Call By Rerference. Daher Editiert man die Werte direkt in @_ editiert man das Original. Das ist aber nicht zu verwechseln mit Referenzen in Perl. "Call by Reference" ist in diesem Sinne nur Intern, also man sieht die Referenzen nicht. Referenzen an sich sind in Perl sichtbar und bilden eine eigenen Datentyp. Bei Zuweisungen Kopiert man allerdiengs immer. Dadurch das man am anfang einer Funktion sowieso immer @_ entpackt glauben wohl einige der Aufruf wäre Call by Value. Das Konzeot findest du auch woanders. Zum Beispiel bei einer for Schleife. Hier hast du in diesem Sinne auch "Call by Reference" Die Zählervariable ist praktisch ein Alias zum Original. Ändert du etwas änderst du das original ebenfalls. my @foo = (1, 2, 3); for my $i ( @foo ) { $i = $i * 2; } Also nach dem ausfpüren steht in @foo dann "2, 4, 6". map(), und grep() arbeiten ebenfalls mit solchen Aliase. Aber wie gesagt das ist alles letztendlich Perl Intern. Das hat nichts mit dem Thema Referenzen in Perl direkt zu tun. Den bei diesen Sachen arbeitet man nicht mit den Referenzen. "call By Reference" sagt ja nur aus in welcher Art Werte übergeben werden. Diese ganzen Ausdrücke sind wohl alle etwas unglücklich da sie zu wenig differenzieren. |