package Tie::StorableHash; use Storable; sub TIEHASH { my $class = shift; my $storage = shift || "autostorage"; my $instance = shift || {}; $instance = retrieve $storage if -e $storage; return bless { value => $instance, storage => $storage, } => $class; } sub FETCH { #print "FETCH got $_[1]\n"; return $_[0]->{value}->{$_[1]}; } sub STORE { #print "STORE got $_[1] = $_[2]\n"; $_[0]->{value}->{$_[1]} = $_[2]; store $_[0]->{value}, $_[0]->{storage}; } sub DESTROY { undef $_[0]; } package main; tie %karma, Tie::StorableHash, "autostorage", {}; print "karma=%karma\n"; print "$karma{dada}\n"; $karma{dada}++; print "$karma{dada}\n"; $karma{larsen} = { value => 1000, comment => "troppo", } unless exists $karma{larsen}; print "$karma{larsen}->{value}\n";