Thread Hash kopieren (9 answers)
Opened by Jiep1963 at 2015-12-14 12:56

Raubtier
 2015-12-15 17:21
#183245 #183245
User since
2012-05-04
1076 Artikel
BenutzerIn
[default_avatar]
Erstens: da brauchst du gar nicht zu diskutieren, viele globale Variablen sind immer schlecht. Eine Referenz zu übergeben kostet praktisch nichts. So viel Performacevorteile kannst du gar nicht gewinnen, die nicht durch Entwicklungszeit wieder verlorengehen (Größenordnungen!). Niemand hat gesagt, dass du große unveränderliche Objekte kopieren sollst.

Zurück zum Problem: du wirst irgendwo was falsch gemacht haben. Hier ein kleines Testprogramm inkl Ausgabe (das verhält sich wie gewünscht, kein Problem mit Löschen):

Programm:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
use warnings;
use Data::Dumper;

dbmopen(my %h_FileMd5Sum_PerlDB, "test.dbm", 0660 );
print "Aktuell drin:\n";
print Dumper \%h_FileMd5Sum_PerlDB;

if ($ARGV[0] && $ARGV[0] eq 'clean') {
    print "Leere Hash.\n";
    %h_FileMd5Sum_PerlDB = ();
} else {
    print "Fuege Wert hinzu.\n";
    $h_FileMd5Sum_PerlDB{rand()} = rand();
}
dbmclose %h_FileMd5Sum_PerlDB;

Ausgabe:
Code: (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
25
26
27
28
29
30
31
32
33
34
35
[17:19:18] ~/test$ perl dbm1.pl 
Aktuell drin:
$VAR1 = {};
Fuege Wert hinzu.
[17:19:21] ~/test$ perl dbm1.pl
Aktuell drin:
$VAR1 = {
'0.0638814420412643' => '0.945874316458688'
};
Fuege Wert hinzu.
[17:19:22] ~/test$ perl dbm1.pl
Aktuell drin:
$VAR1 = {
'0.499142777963669' => '0.14024860186419',
'0.0638814420412643' => '0.945874316458688'
};
Fuege Wert hinzu.
[17:19:23] ~/test$ perl dbm1.pl clean
Aktuell drin:
$VAR1 = {
'0.499142777963669' => '0.14024860186419',
'0.0638814420412643' => '0.945874316458688',
'0.516201025431172' => '0.596852673524157'
};
Leere Hash.
[17:19:25] ~/test$ perl dbm1.pl
Aktuell drin:
$VAR1 = {};
Fuege Wert hinzu.
[17:19:28] ~/test$ perl dbm1.pl
Aktuell drin:
$VAR1 = {
'0.217905852102803' => '0.371467244652198'
};
Fuege Wert hinzu.

View full thread Hash kopieren