xref: /openbsd-src/gnu/usr.bin/perl/lib/SelectSaver.pm (revision ba47ec9da08b5e716a167fd61325b8edfcb66dd6)
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]';
41    my $fh = select;
42    my $self = bless [$fh], $_[0];
43    select qualify($_[1], caller) if @_ > 1;
44    $self;
45}
46
47sub DESTROY {
48    my $this = $_[0];
49    select $$this[0];
50}
51
521;
53