_Cool_ topic! Real meat in this one! As to the final question, nothing comes to mind for the specific route you've taken here, but my mind wandered off in another direction. Would it be possible to derive from IO::File, perhaps something like (untested): package IO::Reopener; use base qw(IO::File); use Carp; my %name; sub new { my($class, $name) = @_; $class = ref($class) || $class; my $fp = $self::SUPER->new(">$name") || croak "$0: open $name: $!\n"; $name{$fp} = $name; bless $fp, $class; } sub close { my($self) = @ARGV; $self::SUPER->close || croak "$0: close $name{$self}: $!\n"; $name{$self}++; $self::SUPER->open(">$name{$self}") or croak "$0: open $name{$self}: $!\n"; } DESTROY { delete $name{$self}; my $boing = $SELF::SUPER->can(DESTROY); goto &$boing if $boing; } If that worked, then you could cycle the file by just closing the handle (kinda reminiscent of the magic ARGV, in a way), and undeffing it (or letting it sail out of scope) should clean up everything. But somehow I've got two suspicions. The first one is that I made so many errors in the above code that there's no way it could ever work, because I just haven't used this O-O stuff much at all; and the second one is that the IO::File stuff might not be quite sufficiently completely cleanly O-O, so you can't really override and inherit and so forth in quite the fashion we need to here. -Bennett