Perl One衬垫适用于3种情况

时间:2013-08-29 12:57:51

标签: perl conditional-operator

我有这个

if($x<10){                                  
    print "child";
}elseif($x>10 && $x<18){
    print "teenage"
}else{
    print "old"
}

我想穿上perl one liner我怎么能这样做请帮帮我

4 个答案:

答案 0 :(得分:5)

您可以使用条件运算符。您还需要只说print一次 - 我也会改变您的条件,因为10既不是>10也不是<10,但您的代码认为{{ 1}}是10

old

答案 1 :(得分:2)

for my $x ( 5, 15, 55 ) {
    print "$x is ";
    print (($x<10) ? 'child' : ($x>10 && $x<18) ? 'teenage' : 'old');
    print "\n";
}

答案 2 :(得分:2)

Perl中的条件运算符

您正在寻找conditional operator(一种三元运算符形式,它充当速记if语句,而不是Perl特定的):

print $age < 10 ? "child" : $age < 18 ? "teenage" : "old";

此外,您的代码将10视为旧版本,因为它不低于或大于10,所以我已将该函数切换为我认为您希望它执行的操作。

重复使用代码

您可以将其转换为子程序以便于重复使用:

sub determineAgeGroup {
    my $age = $_[0];
    return $age < 10 ? "a child" : $age < 18 ? "a teenager" : "old";
}

my @ages = (5,10,15,20);

foreach my $age (@ages) {
    print "If you're $age you're " . determineAgeGroup($age) . "\n";
}

输出到:

If you're 5 you're a child
If you're 10 you're a teenager
If you're 15 you're a teenager
If you're 20 you're old

Link to working demo

答案 3 :(得分:-1)

不知道你为什么要这样做,但这应该有效:

print (($x<10)?("child"):(($x>10 && $x<18)?("teenage"):("old")))

但仅仅因为它很短并不意味着它比原来更好 - 比较支持/调试这两个选项的难度。

如果您只是在玩游戏,您还可以在适当的数组中定义字符串,并对$x的值进行一些数学计算以获得有效的数组条目。