Initial Commit
This commit is contained in:
56
database/perl/vendor/lib/IO/All/Pipe.pm
vendored
Normal file
56
database/perl/vendor/lib/IO/All/Pipe.pm
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
use strict; use warnings;
|
||||
package IO::All::Pipe;
|
||||
|
||||
use IO::All -base;
|
||||
use IO::File;
|
||||
|
||||
const type => 'pipe';
|
||||
|
||||
sub pipe {
|
||||
my $self = shift;
|
||||
bless $self, __PACKAGE__;
|
||||
$self->name(shift) if @_;
|
||||
return $self->_init;
|
||||
}
|
||||
|
||||
sub _assert_open {
|
||||
my $self = shift;
|
||||
return if $self->is_open;
|
||||
$self->mode(shift) unless $self->mode;
|
||||
$self->open;
|
||||
}
|
||||
|
||||
sub open {
|
||||
my $self = shift;
|
||||
$self->is_open(1);
|
||||
require IO::Handle;
|
||||
$self->io_handle(IO::Handle->new)
|
||||
unless defined $self->io_handle;
|
||||
my $command = $self->name;
|
||||
$command =~ s/(^\||\|$)//;
|
||||
my $mode = shift || $self->mode || '<';
|
||||
my $pipe_mode =
|
||||
$mode eq '>' ? '|-' :
|
||||
$mode eq '<' ? '-|' :
|
||||
$self->throw("Invalid usage mode '$mode' for pipe");
|
||||
CORE::open($self->io_handle, $pipe_mode, $command);
|
||||
$self->_set_binmode;
|
||||
}
|
||||
|
||||
my %mode_msg = (
|
||||
'>' => 'output',
|
||||
'<' => 'input',
|
||||
'>>' => 'append',
|
||||
);
|
||||
sub open_msg {
|
||||
my $self = shift;
|
||||
my $name = defined $self->name
|
||||
? " '" . $self->name . "'"
|
||||
: '';
|
||||
my $direction = defined $mode_msg{$self->mode}
|
||||
? ' for ' . $mode_msg{$self->mode}
|
||||
: '';
|
||||
return qq{Can't open pipe$name$direction:\n$!};
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user