#!/usr/bin/perl -w use strict; use Storable qw(lock_retrieve lock_nstore); use File::Temp (); use Data::Dumper; $Data::Dumper::Purity = 1; $Data::Dumper::Useqq = 1; $Data::Dumper::Sortkeys = 1; die unless @ARGV == 1; my $file = shift; my $data = lock_retrieve($file) or die "lock_retrieve: error reading '$file': $!\n"; my $cereal = Dumper($data); my $tmp = new File::Temp(UNLINK=>1); print $tmp $cereal; my $editor = $ENV{VISUAL} || $ENV{EDITOR} || 'vi'; system($editor, $tmp) == 0 or die "$?/$!"; # seek($tmp, 0, 0) or die "seek: $!"; # wtf? this used to work... close $tmp or die $!; open $tmp, "<$tmp" or die $!; local $/; my $edited = <$tmp>; if ($edited ne $cereal) { my $VAR1; eval $edited; die $@ if $@; lock_nstore($VAR1, $file) or warn "lock_nstore: error writing file '$file': $!\n"; } else { warn "nothing changed; nothing written.\n" }