File Coverage

blib/lib/IO/Divert.pm
Criterion Covered Total %
statement 52 52 100.0
branch 6 8 75.0
condition n/a
subroutine 14 14 100.0
pod 7 7 100.0
total 79 81 97.5


line stmt bran cond sub pod time code
1             package IO::Divert;
2              
3 2     2   493284 use v5.14;
  2         7  
4 2     2   10 use warnings;
  2         4  
  2         145  
5 2     2   488 use utf8;
  2         219  
  2         16  
6 2     2   73 use Encode ();
  2         6  
  2         41  
7 2     2   9 use Carp;
  2         3  
  2         1269  
8              
9             our $VERSION = "0.99";
10              
11             sub new {
12 12     12 1 279488 my $class = shift;
13 12         73 my %opt = (
14             BUFFER => '',
15             encoding => 'utf-8',
16             autoprint => 1,
17             @_
18             );
19 12         35 my $encoding = $opt{encoding};
20             open $opt{FH}, ">:encoding($encoding)", \$opt{BUFFER}
21 12 50   1   232 or croak "open: $!";
  1         871  
  1         14  
  1         5  
22             $opt{STDOUT} = select $opt{FH}
23 12 50       3033 or croak "select: $!";
24 12         74 bless \%opt, $class;
25             }
26              
27             sub fh {
28 19     19 1 24 my $obj = shift;
29 19         181 $obj->{FH};
30             }
31              
32             sub buffer {
33 1     1 1 19 my $obj = shift;
34 1         4 \$obj->{BUFFER};
35             }
36              
37             sub content {
38 2     2 1 19 my $obj = shift;
39 2         8 $obj->flush;
40 2         9 $obj->{BUFFER};
41             }
42              
43             sub flush {
44 5     5 1 22 my $obj = shift;
45 5         16 $obj->fh->flush;
46 5         22 $obj;
47             }
48              
49             sub clear {
50 1     1 1 10 my $obj = shift;
51 1         4 $obj->flush;
52 1         5 seek $obj->fh, 0, 0;
53 1         3 $obj->fh->truncate(0);
54 1         8 $obj->{BUFFER} = '';
55 1         4 $obj;
56             }
57              
58             sub cancel {
59 2     2 1 17 my $obj = shift;
60 2         6 $obj->{autoprint} = 0;
61 2         8 delete $obj->{FINAL};
62 2         7 $obj;
63             }
64              
65             sub DESTROY {
66 12     12   2345 my $obj = shift;
67 12         46 select $obj->{STDOUT};
68 12         36 $obj->fh->close;
69 12 100       15506 if (my $final = $obj->{FINAL}) {
70 3         10 local $_ = $obj->{BUFFER};
71 3         10 $final->();
72 3         31 $obj->{BUFFER} = $_;
73             }
74 12 100       79 if ($obj->{autoprint}) {
75 6         42 print Encode::decode($obj->{encoding}, $obj->{BUFFER});
76             }
77             }
78              
79             1;
80              
81             __END__