Introduce NVef, NVff, and NVgf, use the middle one.
[perl.git] / lib / SelectSaver.pm
1 package SelectSaver;
2
3 =head1 NAME
4
5 SelectSaver - 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
25 A C<SelectSaver> object contains a reference to the file handle that
26 was selected when it was created.  If its C<new> method gets an extra
27 parameter, then that parameter is selected; otherwise, the selected
28 file handle remains unchanged.
29
30 When a C<SelectSaver> is destroyed, it re-selects the file handle
31 that was selected when it was created.
32
33 =cut
34
35 require 5.000;
36 use Carp;
37 use Symbol;
38
39 sub 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
47 sub DESTROY {
48     my $this = $_[0];
49     select $$this[0];
50 }
51
52 1;