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.
SignaturenPrototypen definieren, wonach Argumente "by reference" übergeben werden sollen.
Beispiel zum 1. Fall:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use strict;
use warnings;
use 5.020;
sub function {
$_[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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use strict;
use warnings;
use 5.020;
sub function (\$) {
my ( $ref ) = @_;
$$ref = "Hallo Welt";
}
my $foo = "Hello World";
say "VORHER: $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!