summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl0/lib/SelectSaver.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl0/lib/SelectSaver.pm')
-rwxr-xr-xMaster/tlpkg/tlperl0/lib/SelectSaver.pm54
1 files changed, 54 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl0/lib/SelectSaver.pm b/Master/tlpkg/tlperl0/lib/SelectSaver.pm
new file mode 100755
index 00000000000..b67adff42bb
--- /dev/null
+++ b/Master/tlpkg/tlperl0/lib/SelectSaver.pm
@@ -0,0 +1,54 @@
+package SelectSaver;
+
+our $VERSION = '1.02';
+
+=head1 NAME
+
+SelectSaver - save and restore selected file handle
+
+=head1 SYNOPSIS
+
+ use SelectSaver;
+
+ {
+ my $saver = SelectSaver->new(FILEHANDLE);
+ # FILEHANDLE is selected
+ }
+ # previous handle is selected
+
+ {
+ my $saver = SelectSaver->new;
+ # new handle may be selected, or not
+ }
+ # previous handle is selected
+
+=head1 DESCRIPTION
+
+A C<SelectSaver> object contains a reference to the file handle that
+was selected when it was created. If its C<new> method gets an extra
+parameter, then that parameter is selected; otherwise, the selected
+file handle remains unchanged.
+
+When a C<SelectSaver> is destroyed, it re-selects the file handle
+that was selected when it was created.
+
+=cut
+
+require 5.000;
+use Carp;
+use Symbol;
+
+sub new {
+ @_ >= 1 && @_ <= 2 or croak 'usage: SelectSaver->new( [FILEHANDLE] )';
+ my $fh = select;
+ my $self = bless \$fh, $_[0];
+ select qualify($_[1], caller) if @_ > 1;
+ $self;
+}
+
+sub DESTROY {
+ my $self = $_[0];
+ select $$self;
+}
+
+1;