forked from ingydotnet/io-all-pm
/
STDIO.pm
54 lines (44 loc) · 915 Bytes
/
STDIO.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use strict; use warnings;
package IO::All::STDIO;
use IO::All -base;
use IO::File;
const type => 'stdio';
sub stdio {
my $self = shift;
bless $self, __PACKAGE__;
return $self->_init;
}
sub stdin {
my $self = shift;
$self->open('<');
return $self;
}
sub stdout {
my $self = shift;
$self->open('>');
return $self;
}
sub stderr {
my $self = shift;
$self->open_stderr;
return $self;
}
sub open {
my $self = shift;
$self->is_open(1);
my $mode = shift || $self->mode || '<';
my $fileno = $mode eq '>'
? fileno(STDOUT)
: fileno(STDIN);
$self->io_handle(IO::File->new);
$self->io_handle->fdopen($fileno, $mode);
$self->set_binmode;
}
sub open_stderr {
my $self = shift;
$self->is_open(1);
$self->io_handle(IO::File->new);
$self->io_handle->fdopen(fileno(STDERR), '>') ? $self : 0;
}
# XXX Add overload support
1;