SelectSaver.pm 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package SelectSaver;
  2. our $VERSION = '1.02';
  3. =head1 NAME
  4. SelectSaver - save and restore selected file handle
  5. =head1 SYNOPSIS
  6. use SelectSaver;
  7. {
  8. my $saver = SelectSaver->new(FILEHANDLE);
  9. # FILEHANDLE is selected
  10. }
  11. # previous handle is selected
  12. {
  13. my $saver = SelectSaver->new;
  14. # new handle may be selected, or not
  15. }
  16. # previous handle is selected
  17. =head1 DESCRIPTION
  18. A C<SelectSaver> object contains a reference to the file handle that
  19. was selected when it was created. If its C<new> method gets an extra
  20. parameter, then that parameter is selected; otherwise, the selected
  21. file handle remains unchanged.
  22. When a C<SelectSaver> is destroyed, it re-selects the file handle
  23. that was selected when it was created.
  24. =cut
  25. require 5.000;
  26. use Carp;
  27. use Symbol;
  28. sub new {
  29. @_ >= 1 && @_ <= 2 or croak 'usage: SelectSaver->new( [FILEHANDLE] )';
  30. my $fh = select;
  31. my $self = bless \$fh, $_[0];
  32. select qualify($_[1], caller) if @_ > 1;
  33. $self;
  34. }
  35. sub DESTROY {
  36. my $self = $_[0];
  37. select $$self;
  38. }
  39. 1;