1package SelectSaver; 2 3our $VERSION = '1.02'; 4 5=head1 NAME 6 7SelectSaver - save and restore selected file handle 8 9=head1 SYNOPSIS 10 11 use SelectSaver; 12 13 { 14 my $saver = SelectSaver->new(FILEHANDLE); 15 # FILEHANDLE is selected 16 } 17 # previous handle is selected 18 19 { 20 my $saver = SelectSaver->new; 21 # new handle may be selected, or not 22 } 23 # previous handle is selected 24 25=head1 DESCRIPTION 26 27A C<SelectSaver> object contains a reference to the file handle that 28was selected when it was created. If its C<new> method gets an extra 29parameter, then that parameter is selected; otherwise, the selected 30file handle remains unchanged. 31 32When a C<SelectSaver> is destroyed, it re-selects the file handle 33that was selected when it was created. 34 35=cut 36 37require 5.000; 38use Carp; 39use Symbol; 40 41sub new { 42 @_ >= 1 && @_ <= 2 or croak 'usage: SelectSaver->new( [FILEHANDLE] )'; 43 my $fh = select; 44 my $self = bless \$fh, $_[0]; 45 select qualify($_[1], caller) if @_ > 1; 46 $self; 47} 48 49sub DESTROY { 50 my $self = $_[0]; 51 select $$self; 52} 53 541; 55