xref: /openbsd-src/gnu/usr.bin/perl/lib/SelectSaver.pm (revision ba47ec9da08b5e716a167fd61325b8edfcb66dd6)
14a4f25f9Sdownsjpackage SelectSaver;
24a4f25f9Sdownsj
34a4f25f9Sdownsj=head1 NAME
44a4f25f9Sdownsj
54a4f25f9SdownsjSelectSaver - save and restore selected file handle
64a4f25f9Sdownsj
74a4f25f9Sdownsj=head1 SYNOPSIS
84a4f25f9Sdownsj
94a4f25f9Sdownsj    use SelectSaver;
104a4f25f9Sdownsj
114a4f25f9Sdownsj    {
124a4f25f9Sdownsj       my $saver = new SelectSaver(FILEHANDLE);
134a4f25f9Sdownsj       # FILEHANDLE is selected
144a4f25f9Sdownsj    }
154a4f25f9Sdownsj    # previous handle is selected
164a4f25f9Sdownsj
174a4f25f9Sdownsj    {
184a4f25f9Sdownsj       my $saver = new SelectSaver;
194a4f25f9Sdownsj       # new handle may be selected, or not
204a4f25f9Sdownsj    }
214a4f25f9Sdownsj    # previous handle is selected
224a4f25f9Sdownsj
234a4f25f9Sdownsj=head1 DESCRIPTION
244a4f25f9Sdownsj
254a4f25f9SdownsjA C<SelectSaver> object contains a reference to the file handle that
264a4f25f9Sdownsjwas selected when it was created.  If its C<new> method gets an extra
274a4f25f9Sdownsjparameter, then that parameter is selected; otherwise, the selected
284a4f25f9Sdownsjfile handle remains unchanged.
294a4f25f9Sdownsj
304a4f25f9SdownsjWhen a C<SelectSaver> is destroyed, it re-selects the file handle
314a4f25f9Sdownsjthat was selected when it was created.
324a4f25f9Sdownsj
334a4f25f9Sdownsj=cut
344a4f25f9Sdownsj
354a4f25f9Sdownsjrequire 5.000;
364a4f25f9Sdownsjuse Carp;
374a4f25f9Sdownsjuse Symbol;
384a4f25f9Sdownsj
394a4f25f9Sdownsjsub new {
404a4f25f9Sdownsj    @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]';
41*ba47ec9dSmillert    my $fh = select;
42*ba47ec9dSmillert    my $self = bless [$fh], $_[0];
43*ba47ec9dSmillert    select qualify($_[1], caller) if @_ > 1;
44*ba47ec9dSmillert    $self;
454a4f25f9Sdownsj}
464a4f25f9Sdownsj
474a4f25f9Sdownsjsub DESTROY {
484a4f25f9Sdownsj    my $this = $_[0];
494a4f25f9Sdownsj    select $$this[0];
504a4f25f9Sdownsj}
514a4f25f9Sdownsj
524a4f25f9Sdownsj1;
53