14a4f25f9Sdownsjpackage SelectSaver; 24a4f25f9Sdownsj 34a4f25f9Sdownsj=head1 NAME 44a4f25f9Sdownsj 54a4f25f9SdownsjSelectSaver - save and restore selected file handle 64a4f25f9Sdownsj 74a4f25f9Sdownsj=head1 SYNOPSIS 84a4f25f9Sdownsj 94a4f25f9Sdownsj use SelectSaver; 104a4f25f9Sdownsj 114a4f25f9Sdownsj { 124a4f25f9Sdownsj my $saver = new SelectSaver(FILEHANDLE); 134a4f25f9Sdownsj # FILEHANDLE is selected 144a4f25f9Sdownsj } 154a4f25f9Sdownsj # previous handle is selected 164a4f25f9Sdownsj 174a4f25f9Sdownsj { 184a4f25f9Sdownsj my $saver = new SelectSaver; 194a4f25f9Sdownsj # new handle may be selected, or not 204a4f25f9Sdownsj } 214a4f25f9Sdownsj # previous handle is selected 224a4f25f9Sdownsj 234a4f25f9Sdownsj=head1 DESCRIPTION 244a4f25f9Sdownsj 254a4f25f9SdownsjA C<SelectSaver> object contains a reference to the file handle that 264a4f25f9Sdownsjwas selected when it was created. If its C<new> method gets an extra 274a4f25f9Sdownsjparameter, then that parameter is selected; otherwise, the selected 284a4f25f9Sdownsjfile handle remains unchanged. 294a4f25f9Sdownsj 304a4f25f9SdownsjWhen a C<SelectSaver> is destroyed, it re-selects the file handle 314a4f25f9Sdownsjthat was selected when it was created. 324a4f25f9Sdownsj 334a4f25f9Sdownsj=cut 344a4f25f9Sdownsj 354a4f25f9Sdownsjrequire 5.000; 364a4f25f9Sdownsjuse Carp; 374a4f25f9Sdownsjuse Symbol; 384a4f25f9Sdownsj 394a4f25f9Sdownsjsub new { 404a4f25f9Sdownsj @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]'; 41*ba47ec9dSmillert my $fh = select; 42*ba47ec9dSmillert my $self = bless [$fh], $_[0]; 43*ba47ec9dSmillert select qualify($_[1], caller) if @_ > 1; 44*ba47ec9dSmillert $self; 454a4f25f9Sdownsj} 464a4f25f9Sdownsj 474a4f25f9Sdownsjsub DESTROY { 484a4f25f9Sdownsj my $this = $_[0]; 494a4f25f9Sdownsj select $$this[0]; 504a4f25f9Sdownsj} 514a4f25f9Sdownsj 524a4f25f9Sdownsj1; 53