Thread Funktion ohne Returnvalue
(6 answers)
Opened by rosti at 2023-10-27 07:47
Es gibt da im Prinzip (mindestens) zwei Wege, wie man übergebene Variablen direkt ändern kann:
1. Ausnutzen, das die Argumente einer Funktion über Aliase in @_ direkt zugreifbar sind 2. Beispiel zum 1. Fall: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #! /usr/bin/env perl use strict; use warnings; use 5.020; sub function { # arguments are aliased to @_ # Overwrite the first argument $_[0] = "Hallo Welt"; } my $foo = "Hello World"; say "Vorher: $foo"; function($foo); say "Nachher: $foo"; __END__; Man kann damit keine statischen Werte (String-Literale) überschreiben. Ein function("Hello World"); sollte in einen Fehler laufen. Beispiel zum 2. Fall: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #! /usr/bin/env perl use strict; use warnings; use 5.020; # Prototype defines, we expect ONE argument and we pass it by reference # (the user doesn't need to reference it herself) sub function (\$) { my ( $ref ) = @_; $$ref = "Hallo Welt"; } my $foo = "Hello World"; say "VORHER: $foo"; # see, no reference by user here (\$foo)! function($foo); say "NACHHER: $foo"; __END__; Edit: Signatur zu Prototyp korrigiert. Danke @haj für den Hinweis. Last edited: 2023-10-27 11:30:12 +0200 (CEST) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |