Thread Funktion ohne Returnvalue (6 answers)
Opened by rosti at 2023-10-27 07:47

Linuxer
 2023-10-27 10:21
#195373 #195373
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
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:

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!

View full thread Funktion ohne Returnvalue