while循环带有“OR”条件

时间:2011-11-28 01:10:29

标签: perl

下面是一个代码片段,询问用户输入,如果输入不是“csv”或“newline”,则调用while循环。

对于第5行,while循环尝试将$format与“csv”或“newline”匹配的正确语法是什么?目前它似乎只匹配“csv”。

1 # Request output format
2 print "Format of email addresses required (csv|newline): ";
3 $format = <>;
4 chop($format);
5 while ($format ne ("csv"||"newline")) {
6   print "Invalid format. Enter in csv or newline: ";
7   $format = <>;
8   chop($format);
9 }

5 个答案:

答案 0 :(得分:8)

如果使用Perl&gt; = v5.10,最接近您尝试的工作示例是:

while ( not $format ~~ ["csv", "newline"] ) {

否则,两个rob mayoff的解决方案都可以正常工作。

答案 1 :(得分:7)

while ($format ne 'csv' && $format ne 'newline') {
    ...
}

while ($format !~ /^(csv|newline)$/) {
    ...
}

答案 2 :(得分:2)

while (($format ne "csv") && ($format ne "newline))

由于||是一个短路运算符,因此表达式("csv" || "newline)返回“csv”,因为csv不会计算为false,所以它首先返回。如果是("newline" || "csv"),它会返回换行符(我相信)。

答案 3 :(得分:1)

您应该使用while (($format ne "csv") && ($format ne "newline")) { }

在您的代码中,"csv"||"newline"的结果为"cvs";您的代码等同于while ($format ne "csv") { }

答案 4 :(得分:0)

($format ne "csv" && $format ne "newline")...