Bevor ich hier nachfrage, habe ich über meine Bücher und Tante Google recherchiert. Es geht trotzdem nicht!
Am Schluss soll das alte (persitente Hash) überkopiert werden. Bisher sind mir keine Fehler bei '%hash_1 = %hash_2' aufgefallen. Aber hier scheint das nicht zu funktionieren. Auch dann nicht wenn ich vorher loesche (und wie man sehen kann habe ich zwei Lösch-"Versuche" hinterlegt).
Hinweis: Im Kern meiner Frage geht es nur um die Funktionen 'f_rw_FileMd5Sum_PerlDB', exakt um >>> 'f_copy_hash'. <<<
Die Funktion 'f_search_Alarm' habe ich nur für den Kontext zusätzlich mit angegeben. Aber in dieser Funktion konnte ich durch die 'print LOG DEVELOPERTEST...' herausfinden, dass das alte Hash nicht mit den neuen Daten überschrieben wird sondern (fälschlicher weise) seine alten Daten behält.
Was mache ich also falsch?
Danke für Lösungshinweise!!!
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# ----------8<-------- schipp
##############################
#
# 2.) Persitentes Hash
# * einlesen
# * ueberschreiben
#
# f_rw_FileMd5Sum_PerlDB
#
my $PerlDB = $bin_root . "/.File_Md5Sum_PerlDB";
my $PfadFile_PDB ; my $Md5_PDB ; # my %h_FileMd5Sum_PerlDB; <<< siehe: f_exit
#
sub f_rw_FileMd5Sum_PerlDB
{
dbmopen( %h_FileMd5Sum_PerlDB, $PerlDB , 0660 ) || f_die( $ScriptName . "::FATAL: Konnte die persistente Hash-Datei nicht oeffnen: '" . $PerlDB . "'\n" );
#
#print "\n\nDEVELOPERTEST 07::h_FileMd5Sum_PerlDB\n" ; foreach my $z ( sort( keys( %h_FileMd5Sum_PerlDB ) ) ) { print $z . " :: " . $h_FileMd5Sum_PerlDB{ $z } . "\n"; };
} #EO f_rw_FileMd5Sum_PerlDB
###
#
###############
# f_copy_hash
#
sub f_copy_hash
{
for ( keys( %h_FileMd5Sum_PerlDB ) ) { delete $h_FileMd5Sum_PerlDB{$_}; }; # Alt-Hash-Daten loeschen.
%h_FileMd5Sum_PerlDB = (); # Loeschen 2.te
%h_FileMd5Sum_PerlDB = %h_File_Md5Sum_dat; # Ab jetzt befinden sich die neuen Daten auf der Festplatte.
} #EO f_copy_hash
###
# ----------8<-------- schipp
########################################################################
#
# f_search_Alarm
#
# Alle Dateien, bei denen sich die Md5Sum geaendert hat, werden in
# eine Alram-Liste ueberfuert.
#
# Vorgehen:
# 1.) Alle Files aus '%h_File_Md5Sum_dat' mit Eintraegen aus
# '%h_FileMd5Sum_PerlDB' (Kein Ober- Untermengen-Vergleich)
# auf 'Md5Sum' vergleichen.
# 1.1) Ist ein Unterschied in der Md5Sum zu erkennen, wird die
# Datei in die Alram-Liste eingetragen.
#
my %h_Md5Sum_Alarm;
#
sub f_search_Alarm
{
foreach $Key_FileMd5 ( keys( %h_File_Md5Sum_dat ) )
{
foreach $Key_PerlDB ( keys( %h_FileMd5Sum_PerlDB ) )
{
$run_through++;
if( $Key_FileMd5 eq $Key_PerlDB )
{
#print "1:1 Key_PerlDB = " . $Key_PerlDB . "\t\tMd5Sum = " . $h_FileMd5Sum_PerlDB{ $Key_PerlDB } . "\n";
#print "1:1 Key_FileMd5 = " . $Key_FileMd5 . "\t\tMd5Sum = " . $h_File_Md5Sum_dat{ $Key_FileMd5 } . "\n\n";
##################
# Md5Sum-Vergleich
if( $h_File_Md5Sum_dat{ $Key_FileMd5 } ne $h_FileMd5Sum_PerlDB{ $Key_PerlDB } )
{
print LOG "DEVELOPERTEST::h_File_Md5Sum_dat{ Key_FileMd5 } = '" . $h_File_Md5Sum_dat{ $Key_FileMd5 } . "' = '" . $Key_FileMd5 . "'\n";
print LOG "DEVELOPERTEST::h_FileMd5Sum_PerlDB{ Key_PerlDB } = '" . $h_FileMd5Sum_PerlDB{ $Key_PerlDB } . "' = '" . $Key_PerlDB . "'\n\n---\n\n";
$h_Md5Sum_Alarm{ $Key_FileMd5 } = $h_File_Md5Sum_dat{ $Key_FileMd5 }
}
} #EO if Key_PerlDB = Key_FileMd5
} #EO foreach h_File_Md5Sum_dat
} #EO foreach h_FileMd5Sum_PerlDB
#print "\n\nDEVELOPERTEST 10::h_Md5Sum_Alarm\n" ; foreach my $z ( sort( keys( %h_Md5Sum_Alarm ) ) ) { print $z . " :: " . $h_Md5Sum_Alarm{ $z } . "\n"; };
} #EO f_search_Alarm
###
# ----------8<-------- schipp