######################################################################## sub savehash { ######################################################################## my $hash = shift; my $path = shift; my $fh = new IO::Zlib; $fh->open ($path, "wb") or die $path . ": $!\n"; my $cnt; $cnt = keys %{$hash}; syswrite $fh, sprintf ("%03d", $cnt), 3; while (my ($id, $entrylist) = each %{$hash}){ syswrite $fh, sprintf ("%03d", length($id)), 3; syswrite $fh, $id, length($id); $cnt = @{$entrylist}; syswrite $fh, sprintf ("%03d", $cnt), 3; foreach my $entry (@{$entrylist}) { syswrite $fh, sprintf "%03d", length $entry, 3; syswrite $fh, $entry, length($entry); } } } ######################################################################## sub loadhash { ######################################################################## my $hash = shift; my $path = shift; my $fh = new IO::Zlib; $fh->open($path, "rb") or die $path . ": $!\n"; my ($cnt, $len); sysread $fh, $cnt, 3; for (my $fidcnt = $cnt; $idcnt > 0; $idcnt--) { my $id; sysread $fh, $len, 3; sysread $fh, $id, $len; sysread $fh, $cnt, 3; for (my $entrycnt = $cnt; $entrycnt > 0; $entrycnt--) { my $entry; sysread $fh, $len, 3; sysread $fh, $entry, $len; push @{$hash->{$id}}, $entry; } } }