 
Use a MLDBM to store the values between calls to your program:
use MLDBM "DB_File";
my ($VARIABLE1,$VARIABLE2);
my $Persistent_Store = "/projects/foo/data";
BEGIN {
    my %data;
    tie(%data, "MLDBM", $Persistent_Store)
        or die "Can't tie to $Persistent_Store : $!";
    $VARIABLE1 = $data{VARIABLE1};
    $VARIABLE2 = $data{VARIABLE2};
    # ...
    untie %data;
}
END {
    my %data;
    tie (%data, "MLDBM", $Persistent_Store)
        or die "Can't tie to $Persistent_Store : $!";
    $data{VARIABLE1} = $VARIABLE1;
    $data{VARIABLE2} = $VARIABLE2;
    # ...
    untie %data;
}An important limitation of MLDBM is that you can't add to or alter the structure in the reference without assignment to a temporary variable. We do this in the sample program in Example 14-4, assigning to $array_ref before we push. You can't simply do this:
push(@{$db{$user}}, $duration);For a start, MLDBM doesn't allow it. Also, $db{$user} might not be in the database (the array reference isn't automatically created as it would be if %db weren't tied to a DBM file). This is why we test exists $db{$user} when we give $array_ref its initial value. We're creating the empty array for the case where it doesn't already exist.
  #!/usr/bin/perl -w
  # mldbm_demo - show how to use MLDBM with DB_File
  
  use MLDBM "DB_File";
  
  $db = "/tmp/mldbm-array";
  
  tie %db, "MLDBM", $db
    or die "Can't open $db : $!";
  
  while(<DATA>) {
      chomp;
      ($user, $duration) = split(/\s+/, $_);
      $array_ref = exists $db{$user} ? $db{$user} : [  ];
      push(@$array_ref, $duration);
      $db{$user} = $array_ref;
  }
  
  foreach $user (sort keys %db) {
      print "$user: ";
      $total = 0;
      foreach $duration (@{ $db{$user} }) {
          print "$duration ";
          $total += $duration;
      }
          print "($total)\n";
      }
  
  _ _END_ _
  gnat        15.3
  tchrist     2.5
  jules       22.1
  tchrist     15.9
  gnat        8.7Newer versions of MLDBM allow you to select not just the database module (we recommend DB_File), but also the serialization module (we recommend Storable). Early versions limited you to Data::Dumper for serializing, which is slower than Storable. Here's how you use DB_File with Storable:
use MLDBM qw(DB_File Storable);
The documentation for the standard Data::Dumper and Storable modules; the documentation for the FreezeThaw and MLDBM modules from CPAN; Recipe 11.13; Recipe 14.6
 
Copyright © 2003 O'Reilly & Associates. All rights reserved.