package CGI::Capture::TieSTDIN;
# Small class for replacing STDIN with a provided string
use 5.006;
use strict;
use warnings;
use vars qw{$VERSION};
BEGIN {
$VERSION = '1.14';
}
sub TIEHANDLE {
my $class = shift;
my $string = shift;
return bless {
string => $string,
};
}
sub READ {
my $self = shift;
my $string = shift;
unless ( defined $string ) {
$_[0] = undef;
return 0;
}
my $offset = $_[2] || 0;
my $length = $_[1];
my $buffer = substr( $string, $offset, $length );
my $rv = length $buffer;
$_[0] = $buffer;
return $rv;
}
sub READLINE {
my $self = shift;
my $string = $self->{string};
unless ( defined $$string ) {
return undef;
}
if ( wantarray ) {
my @lines = split /(?<=\n)/, $$string;
$$string = undef;
return @lines;
} else {
if ( $$string =~ s/^(.+?\n)// ) {
return "$1";
} else {
my $rv = $$string;
$$string = undef;
return $rv;
}
}
}
sub CLOSE {
my $self = shift;
return close $self;
}
1;