Ask

 view release on metacpan or  search on metacpan

lib/Ask/STDIO.pm  view on Meta::CPAN

use 5.008008;
use strict;
use warnings;

package Ask::STDIO;

our $AUTHORITY = 'cpan:TOBYINK';
our $VERSION   = '0.015';

use Moo;
use namespace::autoclean;

with 'Ask::API';

sub is_usable {
	my ( $self ) = @_;
	-t STDIN and -t STDOUT;
}

sub quality {
	( -t STDIN and -t STDOUT ) ? 80 : 20;
}

sub entry {
	my ( $self, %o ) = @_;
	$self->info( text => $o{text} ) if exists $o{text};
	
	my ( $line, $tio );
	
	if (
		$o{hide_text}
		and do { require POSIX; $tio = 'POSIX::Termios'->new }
		)
	{
		require POSIX;
		my $tio = POSIX::Termios->new;
		$tio->getattr( 0 );
		$tio->setlflag( $tio->getlflag & ~POSIX::ECHO() );
		$tio->setattr( 0 );
		chomp( $line = <STDIN> );
		$tio->setlflag( $tio->getlflag | POSIX::ECHO() );
		$tio->setattr( 0 );
	} #/ if ( $o{hide_text} and...)
	else {
		chomp( $line = <STDIN> );
	}
	
	return $line;
} #/ sub entry

sub info {
	my ( $self, %o ) = @_;
	print STDOUT "$o{text}\n";
}

sub warning {
	my ( $self, %o ) = @_;
	print STDERR "WARNING: $o{text}\n";
}

sub error {
	my ( $self, %o ) = @_;
	print STDERR "ERROR: $o{text}\n";
}

1;

__END__

=head1 NAME



( run in 0.685 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )