The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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;