Acme-Throw
view release on metacpan or search on metacpan
t/lib/Capture/Tiny.pm view on Meta::CPAN
_unproxy( %proxy_std );
# _debug( "# killing tee subprocesses ...\n" ) if $do_tee;
_kill_tees( $stash ) if $do_tee;
# return captured output, but shortcut in void context
# unless we have to echo output to tied/scalar handles;
my %got;
if ( defined wantarray or ($do_tee && keys %localize) ) {
for ( keys %do ) {
_relayer($stash->{capture}{$_}, $layers{$_});
$got{$_} = _slurp($_, $stash);
# _debug("# slurped " . length($got{$_}) . " bytes from $_\n");
}
print CT_ORIG_STDOUT $got{stdout}
if $do_stdout && $do_tee && $localize{stdout};
print CT_ORIG_STDERR $got{stderr}
if $do_stderr && $do_tee && $localize{stderr};
}
$? = $exit_code;
$@ = $inner_error if $inner_error;
die $outer_error if $outer_error;
# _debug( "# ending _capture_tee with (@_)...\n" );
t/lib/IO/String.pm view on Meta::CPAN
*$self->{pos} = 0;
*$self->{lno} = 0;
return $self;
}
sub pad
{
my $self = shift;
my $old = *$self->{pad};
*$self->{pad} = substr($_[0], 0, 1) if @_;
return "\0" unless defined($old) && length($old);
return $old;
}
sub dump
{
require Data::Dumper;
my $self = shift;
print Data::Dumper->Dump([$self], ['*self']);
print Data::Dumper->Dump([*$self{HASH}], ['$self{HASH}']);
return;
t/lib/IO/String.pm view on Meta::CPAN
sub ungetc
{
my $self = shift;
$self->setpos($self->getpos() - 1);
return 1;
}
sub eof
{
my $self = shift;
return length(${*$self->{buf}}) <= *$self->{pos};
}
sub print
{
my $self = shift;
if (defined $\) {
if (defined $,) {
$self->write(join($,, @_).$\);
}
else {
t/lib/IO/String.pm view on Meta::CPAN
$SEEK_CUR = 1;
$SEEK_END = 2;
}
}
sub seek
{
my($self,$off,$whence) = @_;
my $buf = *$self->{buf} || return 0;
my $len = length($$buf);
my $pos = *$self->{pos};
_init_seek_constants() unless defined $SEEK_SET;
if ($whence == $SEEK_SET) { $pos = $off }
elsif ($whence == $SEEK_CUR) { $pos += $off }
elsif ($whence == $SEEK_END) { $pos = $len + $off }
else { die "Bad whence ($whence)" }
print "SEEK(POS=$pos,OFF=$off,LEN=$len)\n" if $DEBUG;
t/lib/IO/String.pm view on Meta::CPAN
return 1;
}
sub pos
{
my $self = shift;
my $old = *$self->{pos};
if (@_) {
my $pos = shift || 0;
my $buf = *$self->{buf};
my $len = $buf ? length($$buf) : 0;
$pos = $len if $pos > $len;
*$self->{pos} = $pos;
}
return $old;
}
sub getpos { shift->pos; }
*sysseek = \&seek;
*setpos = \&pos;
*tell = \&getpos;
sub getline
{
my $self = shift;
my $buf = *$self->{buf} || return;
my $len = length($$buf);
my $pos = *$self->{pos};
return if $pos >= $len;
unless (defined $/) { # slurp
*$self->{pos} = $len;
return substr($$buf, $pos);
}
unless (length $/) { # paragraph mode
# XXX slow&lazy implementation using getc()
my $para = "";
my $eol = 0;
my $c;
while (defined($c = $self->getc)) {
if ($c eq "\n") {
$eol++;
next if $eol > 2;
}
elsif ($eol > 1) {
t/lib/IO/String.pm view on Meta::CPAN
return $para; # XXX wantarray
}
my $idx = index($$buf,$/,$pos);
if ($idx < 0) {
# return rest of it
*$self->{pos} = $len;
$. = ++ *$self->{lno};
return substr($$buf, $pos);
}
$len = $idx - $pos + length($/);
*$self->{pos} += $len;
$. = ++ *$self->{lno};
return substr($$buf, $pos, $len);
}
sub getlines
{
die "getlines() called in scalar context\n" unless wantarray;
my $self = shift;
my($line, @lines);
t/lib/IO/String.pm view on Meta::CPAN
my $old = *$self->{lno};
*$self->{lno} = shift if @_;
return $old;
}
sub truncate
{
my $self = shift;
my $len = shift || 0;
my $buf = *$self->{buf};
if (length($$buf) >= $len) {
substr($$buf, $len) = '';
*$self->{pos} = $len if $len < *$self->{pos};
}
else {
$$buf .= ($self->pad x ($len - length($$buf)));
}
return 1;
}
sub read
{
my $self = shift;
my $buf = *$self->{buf};
return undef unless $buf;
my $pos = *$self->{pos};
my $rem = length($$buf) - $pos;
my $len = $_[1];
$len = $rem if $len > $rem;
return undef if $len < 0;
if (@_ > 2) { # read offset
substr($_[0],$_[2]) = substr($$buf, $pos, $len);
}
else {
$_[0] = substr($$buf, $pos, $len);
}
*$self->{pos} += $len;
return $len;
}
sub write
{
my $self = shift;
my $buf = *$self->{buf};
return unless $buf;
my $pos = *$self->{pos};
my $slen = length($_[0]);
my $len = $slen;
my $off = 0;
if (@_ > 1) {
$len = $_[1] if $_[1] < $len;
if (@_ > 2) {
$off = $_[2] || 0;
die "Offset outside string" if $off > $slen;
if ($off < 0) {
$off += $slen;
die "Offset outside string" if $off < 0;
t/lib/IO/String.pm view on Meta::CPAN
}
*sysread = \&read;
*syswrite = \&write;
sub stat
{
my $self = shift;
return unless $self->opened;
return 1 unless wantarray;
my $len = length ${*$self->{buf}};
return (
undef, undef, # dev, ino
0666, # filemode
1, # links
$>, # user id
$), # group id
undef, # device id
$len, # size
undef, # atime
( run in 0.619 second using v1.01-cache-2.11-cpan-65fba6d93b7 )