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