2013-06-20T12:27:54 KeanIch ... übergebe Variablen und Objekte (z.b. Tk-Widgets) immer direkt und nicht über Referenzen.
2013-06-20T12:27:54 KeanGerade bei großen Tk-Hlist Widgets mache ich mir schon sorgen dass diese nach dem übergeben an eine Funktion zweimal im Speicher sind.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @array = (1..3);
test(@array);
print Dumper \@array;
test_ref(\@array);
print Dumper \@array;
sub test {
my (@values) = @_; # erzeugt kopie von @array,
# also doppelt im Speicher
$values[1] = 9;
print Dumper \@array;
$_[2] = 5; # Mit $_[...] greift man auf
# das Original-Array zu
print Dumper \@array;
}
sub test_ref {
my ($array_ref) = @_; # kopie der referenz, die Werte im
# Array gibt's aber nur einmal
$array_ref->[2] = 6; # verändert Wert in @array
print Dumper \@array;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$VAR1 = [
1,
2,
3
];
$VAR1 = [
1,
2,
5
];
$VAR1 = [
1,
2,
5
];
$VAR1 = [
1,
2,
6
];
$VAR1 = [
1,
2,
6
];
1
2
3
4
5
6
7
8
my @array = ([1,2,3],[4,5,6]);
test(@array);
sub test {
my @values = @_;
$_[0]->[2] = 5; # Originaldaten werden verändert
]
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'
];