NAME
IO::Prompt::Simple - provide a simple user input
SYNOPSIS
# foo.pl
use IO::Prompt::Simple;
my $answer = prompt 'some question...';
print "answer: $answer\n";
# display prompt message, and wait your input.
$ foo.pl
some question: foo[Enter]
answer: foo
DESCRIPTION
IO::Prompt::Simple is porting ExtUtils::MakeMaker's prompt() function.
Added a few more useful features.
THIS MODULE IS ALPHA LEVEL INTERFACE!!
FUNCTIONS
prompt($message, [$default_or_option])
Display prompt message and wait your input.
$answer = prompt $message;
Sets default value:
$answer = prompt 'sets default', 'default';
is $answer, 'default';
or
$answer = prompt 'sets default', { default => 'default' };
is $answer, 'default';
Display like are:
sets default [default]: [Enter]
...
supported options are:
- default: SCALAR
-
Sets default value.
$answer = prompt 'sets default', { default => 'default' }; is $answer, 'default';
- anyone: ARRAYREF | HASHREF | REF-ARRAYREF | Hash::MultiValue
-
Choose any one.
$answer = prompt 'choose', { anyone => [qw/y n/] };
Display like are:
choose (y/n) : [Enter] # Please answer `y` or `n` choose (y/n) : y[Enter] ...
If you specify HASHREF, returned value is HASHREF's value.
$answer = prompt 'choose', { anyone => { y => 1, n => 0 } }; is $answer, 1; # when you input is 'y'
And, when you specify the verbose option, you can tell the user more information.
$answer = prompt 'choose your homepage', { anyone => { google => 'https://google.com/', yahoo => 'https://yahoo.com/', bing => 'https://bing.com/', }, verbose => 1, };
Display like are:
# bing => https://bing.com/ # google => https://google.com/ # yahoo => https://yahoo.com/ choose your homepage : [Enter] # Please answer `bing` or `google` or `yahoo` choose your homepage : google[Enter] ...
If you want preserve the order of keys, you can use Hash::MultiValue.
$answer = prompt 'foo', { anyone => { b => 1, c => 2, a => 4 } }; # prompring => `foo (a/b/c) : ` $answer = prompt 'foo', { anyone => Hash::MultiValue->new(b => 1, c => 2, a => 4) }; # prompring => `foo (b/c/a) : `
Or, you can use REF-ARRAYREF.
$answer = prompt 'foo', { anyone => \[b => 1, c => 2, a => 4] };
- choices
-
Alias of
anyone
- multi: BOOL
-
Returned multiple answers. Your answer are evaluated separated by space.
use Data::Dumper; @answers = prompt 'choices', { choices => [qw/a b c/], multi => 1, }; print Dumper \@answers;
Display like are:
choices (a/b/c) : c a[Enter] $VAR1 = [ 'c', 'a' ];
Or, you can specify HASHREF:
use Data::Dumper; @answers = prompt 'choices', { choices => { google => 'https://google.com/', yahoo => 'https://yahoo.com/', bing => 'https://bing.com/', }, verbose => 1, multi => 1, }; print Dumper \@answers;
Display like are:
# bing => https://bing.com/ # google => https://google.com/ # yahoo => https://yahoo.com/ choices: google yahoo[Enter] $VAR1 = [ 'https://google.com/', 'https://yahoo.com/' ];
- regexp: STR | REGEXP
-
Sets regexp for answer.
$answer = prompt 'regexp', { regexp => '[0-9]{4}' };
Display like are:
regexp : foo[Enter] # Please answer pattern (?^:[0-9{4}]) regexp : 1234 ...
It
regexp
andanyone
is exclusive (anyone
is priority). - ignore_case: BOOL
-
Ignore case for anyone or regexp.
# passed `Y` or `N` $answer = prompt 'ignore_case', { anyone => [qw/y n/], ignore_case => 1, };
- yn: BOOL
-
Shortcut of
{ anyone => \[ y => 1, n => 0 ], ignore_case => 1 }
.$answer = prompt 'are you ok?', { yn => 1 };
Display like are:
are you ok? (y/n) : y[Enter]
- use_default: BOOL
-
Force using for default value. If not specified defaults to an empty string.
$answer = prompt 'use default', { default => 'foo', use_default => 1, }; is $answer, 'foo';
I think, CLI's
--force
like option friendly. - input: FILEHANDLE
-
Sets input file handle (default: STDIN)
$answer = prompt 'input from DATA', { input => *DATA }; is $answer, 'foobar'; __DATA__ foobar
- output: FILEHANDLE
-
Sets output file handle (default: STDOUT)
$answer = prompt 'output for file', { output => $fh };
- encode: STR | Encoder
-
Sets encoding. If specified, returned a decoded string.
- color: STR | ARRAYREF
-
Sets prompt color. Using Term::ANSIColor.
$answer = prompt 'colored prompting', { color => [qw/red on_white/] };
NOTE
If prompt() detects that it is not running interactively and there is nothing on $input
or if the $ENV{PERL_IOPS_USE_DEFAULT}
is set to true or use_default
option is set to true, the $default
will be used without prompting.
This prevents automated processes from blocking on user input.
AUTHOR
xaicron <xaicron {at} gmail.com>
COPYRIGHT
Copyright (C) 2011 Yuji Shimada (@xaicron).
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.