Цикл while с условием «ИЛИ» - PullRequest
2 голосов
/ 28 ноября 2011

Ниже приведен фрагмент кода, который запрашивает ввод данных пользователем, и, если ввод не "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 ]

8 голосов
/ 28 ноября 2011

Если вы используете Perl> = v5.10, самый близкий рабочий пример к тому, что вы пробовали:

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

В противном случае оба решения rob mayoff будут работать просто отлично.

7 голосов
/ 28 ноября 2011
while ($format ne 'csv' && $format ne 'newline') {
    ...
}

или

while ($format !~ /^(csv|newline)$/) {
    ...
}
2 голосов
/ 28 ноября 2011
while (($format ne "csv") && ($format ne "newline))

Поскольку || является оператором короткого замыкания, выражение ("csv" || "newline) возвращает "csv", потому что csv is не оценивается как false, поэтому оно возвращается первым. Если бы это было ("newline" || "csv"), это вернуло бы новую строку (я полагаю).

1 голос
/ 28 ноября 2011

Вы должны использовать while (($format ne "csv") && ($format ne "newline")) { }.

В вашем коде результат "csv"||"newline" равен "cvs";ваш код эквивалентен while ($format ne "csv") { }.

0 голосов
/ 28 ноября 2011
($format ne "csv" && $format ne "newline")...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...