This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl5.002beta3
[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]';
41 my $fh = (@_ > 1) ? (select qualify($_[1], caller)) : select;
42 bless [$fh], $_[0];
43}
44
45sub DESTROY {
46 my $this = $_[0];
47 select $$this[0];
48}
49
501;