--- /dev/null
+package IO::Clever;
+require 5.005_03;
+use strict;
+use vars qw($VERSION @ISA);
+@ISA = qw(IO::String);
+$VERSION = "1.01";
+
+# ChangeLog:
+# 1999-07-21-02:06:47 Uri Guttman told me a critical fix:
+# $fp->input_record_separator is _Global_; local($/) is safer
+
+my(%params);
+
+sub new {
+ my $class = shift;
+ return IO::File->new(@_) unless $_[0] =~ /^>/;
+ my $self = bless IO::String->new(), ref($class) || $class;
+ $params{$self} = [ @_ ];
+ $self;
+}
+
+sub DESTROY {
+ my($self) = @_;
+ my $filename = $params{$self}->[0];
+ return unless $filename =~ s/^>//;
+ my($new) = ${$self->string_ref};
+ if (-f $filename) {
+ my $fp = IO::File->new("<$filename") || die "$0: $filename: $!\n";
+ local ($/);
+ return if $new eq $fp->getline;
+ }
+ IO::File->new(@{$params{$self}})->print($new);
+ delete $params{$self};
+}
+
+1;