use strict; my $persistentVar = $defaultvalue; if( -e $persistentStateFile ) { open FH, $persistentStateFile or die "Failed to open '$persistentStateFile': $!"; local $/, $@; my $ps = ; eval $ps; die $@ if $@; } END{ open FH, "> $persistentStateFile" or warn "Failed to open '$persistentStateFile': $!" and exit(1); print FH Data::Dumper->Dump( [$refToPersistentVar], ['nameofpersistentvar'] ) or warn "Failed to print persistent data, $!" and exit(1); close FH or warn "Failed to close $persistentStateFile, $!" and exit(1); } #### END { open FH, "< $0" or warn "Failed to preserve state... couldn't open '$0', $!" and exit(1); local $/; $_ = ; s/my \$var=$oldvalue/my \$var=$var/m; open FH, "> $0" or warn "Failed to preserve state... couldn't write to '$0', $!" and exit(1); print FH $_; close $file; }