package SelectSaver; =head1 NAME SelectSaver - save and restore selected file handle =head1 SYNOPSIS use SelectSaver; { my $saver = new SelectSaver(FILEHANDLE); # FILEHANDLE is selected } # previous handle is selected { my $saver = new SelectSaver; # new handle may be selected, or not } # previous handle is selected =head1 DESCRIPTION A C object contains a reference to the file handle that was selected when it was created. If its C method gets an extra parameter, then that parameter is selected; otherwise, the selected file handle remains unchanged. When a C is destroyed, it re-selects the file handle that was selected when it was created. =cut require 5.000; use Carp; use Symbol; sub new { @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]'; my $fh = (@_ > 1) ? (select qualify($_[1], caller)) : select; bless [$fh], $_[0]; } sub DESTROY { my $this = $_[0]; select $$this[0]; } 1;