Thread Variablen/Objekte an Funktionen übergeben (3 answers)
Opened by Kean at 2013-06-20 14:27

Raubtier
 2013-06-20 20:41
#168513 #168513
User since
2012-05-04
1075 Artikel
BenutzerIn
[default_avatar]
Eigentlich gibt es in Perl bei Parameterübergabe nur drei Dinge zu beachten:
  • Es gibt genau eine Parameterliste, in der alle Argumente übergeben werden
  • Arrays und Hashes werden zur Liste ihrer Elemente
  • Die Parameterübergabe erfolgt immer per Referenz (bei Arrays ist aber die Referenz auf die Elemente gemeint)


Der erste/zweite Punkt führt dazu, dass man nicht zwei Arrays direkt übergeben kann, ohne Informationen über die Arraygrenzen zu verlieren (es kommt in der Funktion genau ein Array an, das eben von beiden Arrays die Elemente enthält.

Der dritte Punkt ist auch sehr interessant, er gilt bei Arrays aber für die Array-Elemente selbst, nicht für die Arrays selbst:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
$ perl -MData::Dumper -wE'@a=qw(1 2 3); @b=qw(4 5 6);add1(@a, @b);say Dumper \@a, \@b;sub add1{++$_ for @_}'
$VAR1 = [
'2',
'3',
'4'
];
$VAR2 = [
'5',
'6',
'7'
];


Aus diesem Grunde bietet es sich daher oft an, Arrays als Referenzen zu übergeben (dann übergibt man eben nicht alle Elemente).

Außerdem wird ein Call-by-Value durch Code wie den folgenden simuliert:
Code (perl): (dl )
1
2
3
sub foo {
    my ($uebergabeParameter1, $uebergabeParameter2) = @_;
    ...


Interessant ist, dass man trotz Call-by-Reference auch Immediates übergeben kann (es ist dann z.B. eine Referenz auf eine Zahl im Speicher). Ich habe dafür man irgendwo den Terminus "Call by value reference" gelesen.

Als Bonus kannst du außerdem noch über Prototypen in Perldoc:perlsub nachlesen, die die Übergabeart verändern können.
Last edited: 2013-06-20 20:45:34 +0200 (CEST)

View full thread Variablen/Objekte an Funktionen übergeben