xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/lib/SelectSaver.pm (revision 0:68f95e015346)
1*0Sstevel@tonic-gatepackage SelectSaver;
2*0Sstevel@tonic-gate
3*0Sstevel@tonic-gateour $VERSION = '1.00';
4*0Sstevel@tonic-gate
5*0Sstevel@tonic-gate=head1 NAME
6*0Sstevel@tonic-gate
7*0Sstevel@tonic-gateSelectSaver - save and restore selected file handle
8*0Sstevel@tonic-gate
9*0Sstevel@tonic-gate=head1 SYNOPSIS
10*0Sstevel@tonic-gate
11*0Sstevel@tonic-gate    use SelectSaver;
12*0Sstevel@tonic-gate
13*0Sstevel@tonic-gate    {
14*0Sstevel@tonic-gate       my $saver = new SelectSaver(FILEHANDLE);
15*0Sstevel@tonic-gate       # FILEHANDLE is selected
16*0Sstevel@tonic-gate    }
17*0Sstevel@tonic-gate    # previous handle is selected
18*0Sstevel@tonic-gate
19*0Sstevel@tonic-gate    {
20*0Sstevel@tonic-gate       my $saver = new SelectSaver;
21*0Sstevel@tonic-gate       # new handle may be selected, or not
22*0Sstevel@tonic-gate    }
23*0Sstevel@tonic-gate    # previous handle is selected
24*0Sstevel@tonic-gate
25*0Sstevel@tonic-gate=head1 DESCRIPTION
26*0Sstevel@tonic-gate
27*0Sstevel@tonic-gateA C<SelectSaver> object contains a reference to the file handle that
28*0Sstevel@tonic-gatewas selected when it was created.  If its C<new> method gets an extra
29*0Sstevel@tonic-gateparameter, then that parameter is selected; otherwise, the selected
30*0Sstevel@tonic-gatefile handle remains unchanged.
31*0Sstevel@tonic-gate
32*0Sstevel@tonic-gateWhen a C<SelectSaver> is destroyed, it re-selects the file handle
33*0Sstevel@tonic-gatethat was selected when it was created.
34*0Sstevel@tonic-gate
35*0Sstevel@tonic-gate=cut
36*0Sstevel@tonic-gate
37*0Sstevel@tonic-gaterequire 5.000;
38*0Sstevel@tonic-gateuse Carp;
39*0Sstevel@tonic-gateuse Symbol;
40*0Sstevel@tonic-gate
41*0Sstevel@tonic-gatesub new {
42*0Sstevel@tonic-gate    @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]';
43*0Sstevel@tonic-gate    my $fh = select;
44*0Sstevel@tonic-gate    my $self = bless [$fh], $_[0];
45*0Sstevel@tonic-gate    select qualify($_[1], caller) if @_ > 1;
46*0Sstevel@tonic-gate    $self;
47*0Sstevel@tonic-gate}
48*0Sstevel@tonic-gate
49*0Sstevel@tonic-gatesub DESTROY {
50*0Sstevel@tonic-gate    my $this = $_[0];
51*0Sstevel@tonic-gate    select $$this[0];
52*0Sstevel@tonic-gate}
53*0Sstevel@tonic-gate
54*0Sstevel@tonic-gate1;
55