如果不再问,perl脚本可以获取特定的用户数据?

时间:2016-04-05 12:34:59

标签: perl

我需要从用户那里收到5或10或15或20,如果不是,我会再次询问他们,直到他们输入四个数字中的任何一个。这是代码,但没有做同样的事情。指出逻辑上的误解。

{{1}}

2 个答案:

答案 0 :(得分:1)

首先,你不要重复任何事情。通常,将使用while()循环。其次,您正在使用ne来比较字符串。你需要的是==数字输入。第三,你的if陈述不起作用。你必须重复完整的比较:

if ($x == 5 || $x == 10 || $x == 15) {...}

以下是循环示例,并使用grep()进行比较:

use warnings;
use strict;

while (1){
    print "Enter either 5 or 10 or 15 or 20): ";
    my $obfuscation_percentage = <STDIN>; 
    chomp $obfuscation_percentage; 

    my @valid = qw(5 10 15 20);

    if (grep {$obfuscation_percentage == $_} @valid){
        print 10 * $obfuscation_percentage ."\n";
        last;
    }
}

__END__
Enter either 5 or 10 or 15 or 20): 7
Enter either 5 or 10 or 15 or 20): 12
Enter either 5 or 10 or 15 or 20): 5
50

答案 1 :(得分:0)

一些问题。

首先,你不要在任何时候循环,也不要检查STDIN的第二次读取。这是你的代码美化。

print "Enter either 5 or 10 or 15 or 20): ";
my $obfuscation_percentage = <STDIN>; 
chomp $obfuscation_percentage; 
if ($obfuscation_percentage ne 5 or 10 or 15 or 20 ){
    print "Enter valid number: "; 
}
$obfuscation_percentage = <STDIN>; 
chomp $obfuscation_percentage;

所以你需要某种循环来从stdin读取。

第二个问题是,来自perlop

  

二进制“或”返回两个周围表达式的逻辑分离。它相当于||除了非常低的优先权。这使它对控制流有用:

所以它不会像你想象的那样工作,比如列表检查。您需要检查每个号码或做其他事情。

同样ne是一个字符串比较,但你在运算符的右侧有整数,虽然Perl可能足够聪明,可以理解。