如何让脚本非常具有互动性?
剧本目的:
获取用户输入的号码并通过get_mod_val
功能查找mod;如果它返回1然后说“好”并退出脚本;如果它返回0,则要求用户输入奇数。
验证:
以下代码正常;它遵循上面的验证要点1规则,但根据我们的要求法,它不是非常互动。当上述规则失败时,脚本退出,我们需要再次执行脚本。
我们如何使以下代码具有很强的互动性?
$ip_no = $ARGV[0];
if ($ip_no!="") {
$get_mod_op = get_mod_val($ip_no);
if ($ip_no =~ /\D/){
print "Entered number only.....";
exit;
}else{
if ($get_mod_op==1) {
print "Good odd number(${get_mod_op}): ${ip_no} ";
exit;
}else{
print "Good even number(${get_mod_op}): ${ip_no} ";
exit;
}
}
}else{
print "Enter number.";
exit;
}
感谢所有人,最后我已根据您的建议完成了代码,以下代码片段符合我的要求,审核代码并建议优化。
if ($ARGV[0] != "") {
$user_ip = $ARGV[0];
}elsif (($ARGV[0] =~ /\D/ ) || ($ARGV[0] eq "") ){
print "Enter odd number only: ";
$user_ip = <STDIN>;
}else{
$user_ip = <STDIN>;
}
do{ #get mod value, if mod_off is 1 then entered number is odd otherwise ask user to enter the odd number
$mod_off = find_mod_val($user_ip);
if (($user_ip == "") || ($user_ip eq "") || ($user_ip eq "") || ($mod_off == 0)) {
print "Enter odd number only: ";
$user_ip = <STDIN>;
}
}until($mod_off == 1);
print "Good odd number ${user_ip}";
sub find_mod_val($user_ip){
return $user_ip%2;
}
__END__
答案 0 :(得分:2)
不要使用ARGV [0]并从STDIN读取(因此您需要运行脚本并键入所需的单词)。我重写了你的代码:
my $finish = 0;
while( ! $finish ) {
print "Enter number.";
my $ip_no = <STDIN>;
chomp($ip_no);
$get_mod_op = get_mod_val($ip_no);
if( $ip_no =~ /\D/ ){
print "Entered number only.....";
}
elsif( $get_mod_op == 1 ) {
print "Good odd number(${get_mod_op}): ${ip_no} ";
$finish = 1;
}
else {
print "Good even number(${get_mod_op}): ${ip_no} ";
$finish = 1;
}
}
答案 1 :(得分:2)
TIMTOWTDI,这次是递归!好处是您可以重用该函数来验证其他输入。我想你可以制作一个包裹循环的子,但来吧这很有趣!
sub get_input {
my ($message, $valid) = @_;
print "$message: ";
chomp(my $response = <>);
unless( $response =~ $valid ) {
print "Invalid response!\n";
$response = get_input($message, $valid);
}
return $response;
}
my $response = get_input("Enter a number", qr/^\d+$/);
print "Got: $response\n";
答案 2 :(得分:1)
$ARGV[0]
,如果失败,进入请求输入的循环并运行验证。答案 3 :(得分:1)
my $val;
for (;;) {
print "Some prompt: ";
$val = <STDIN>;
chomp $val;
last if is_valid($val);
print "Bad input. Valid inputs are ...\n";
}