#!/usr/bin/perl use Storable qw(lock_nstore lock_retrieve); use strict; my $reports; my %reports; my $label; # load the file if (-e "reporting.storable") { $reports = lock_retrieve("reporting.storable") || die "Couldn't lock_retrieve reporting.storable: $!\n"; } $label = 'old data'; printit(); # generate some random data for (0 .. 10) { my @myyears = (2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011); my $fiscal_year = $myyears[int(rand 9)]; my @myquarters = ('Q1', 'Q2', 'Q3', 'Q4'); my $qua = $myquarters[int(rand 3)]; my @myfiles = ('foo.txt', 'bar.dat', 'bap.zip', 'baz.tgz', 'zif.doc', 'blu.shn', 'sng.mp3', 'zap.pif', 'fiz.pdf', 'shz.nit'); my $filen = $myfiles[int(rand 9)]; my @mytitles = ('fooey', 'dooey', 'looey', 'zooey', 'gooey', 'hooey', 'tooey', 'pooey', 'rooey', 'blooey'); my $title = $mytitles[int(rand 9)]; my @mydescriptions = ('desc1', 'desc2', 'desc3', 'desc4', 'desc5', 'desc6', 'desc7', 'desc8', 'desc9', 'desc10'); my $description = $mydescriptions[int(rand 9)]; # update the data $reports{$fiscal_year}{$qua}{$filen}->{title} = "$title"; $reports{$fiscal_year}{$qua}{$filen}->{description} = "$description"; } $label = 'new data'; printit(); # save the file $reports = \%reports ; lock_nstore ($reports, "reporting.storable") || die "Couldn't lock_nstore reporting.storable: $!\n"; sub printit { my $year; my $quarter; my $file; # print the hash print "\n======== BEGIN $label =========\n"; foreach my $year ( sort keys %{$reports} ) { print "$year: \n"; foreach my $quarter(sort keys %{$reports->{$year}}){ print " $quarter: \n"; foreach my $file (sort keys %{$reports->{$year}{$quarter} } ) { print " Filename: $file\n"; print " Title: $reports->{$year}{$quarter}{$file}{title}\n"; print " Description: $reports->{$year}{$quarter}{$file}{description}\n\n"; } } } print "\n======== END $label =========\n"; }