This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: New harness is failing things
[perl5.git] / lib / SelectSaver.pm
CommitLineData
c07a80fd
PP
1package SelectSaver;
2
3=head1 NAME
4
5SelectSaver - save and restore selected file handle
6
7=head1 SYNOPSIS
8
9 use SelectSaver;
10
11 {
12 my $saver = new SelectSaver(FILEHANDLE);
13 # FILEHANDLE is selected
14 }
15 # previous handle is selected
16
17 {
18 my $saver = new SelectSaver;
19 # new handle may be selected, or not
20 }
21 # previous handle is selected
22
23=head1 DESCRIPTION
24
25A C<SelectSaver> object contains a reference to the file handle that
26was selected when it was created. If its C<new> method gets an extra
27parameter, then that parameter is selected; otherwise, the selected
28file handle remains unchanged.
29
30When a C<SelectSaver> is destroyed, it re-selects the file handle
31that was selected when it was created.
32
33=cut
34
35require 5.000;
36use Carp;
37use Symbol;
38
39sub new {
40 @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]';
37ec1aec
SB
41 my $fh = select;
42 my $self = bless [$fh], $_[0];
43 select qualify($_[1], caller) if @_ > 1;
44 $self;
c07a80fd
PP
45}
46
47sub DESTROY {
48 my $this = $_[0];
49 select $$this[0];
50}
51
521;