下面是一个代码片段,询问用户输入,如果输入不是“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 }
答案 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")...