2017-01-08 2 views
3

Я не уверен, какую ошибку я делаю, но я только что изменил ne на !=, и это сработало.'ne' не работает в цикле do-while, тогда как '! =' Работает

Это простая программа, позволяющая пользователю угадать число до тех пор, пока оно не достигнет целевого номера.

#!/usr/bin/perl 

my $guess = 1; 

do { 
    $guess = <STDIN>; 
} while ($guess != 12) ; # it doesn't work if i replace != with ne 

say "you guessed ", $guess; 
+0

Добро пожаловать в переполнение стека. Пожалуйста, примите [тур] и прочитайте [как спросить]. Ваш первый вопрос был хорошо написан и хорошо принят. Теперь, когда у вас есть хороший ответ, который, очевидно, помог вам, следующий шаг - отметить его как _принятый_, чтобы посетители позже увидели, что он решил проблему. – simbabque

ответ

12

в Perl ne является строка не равно оператор, так и $guess12 рассматриваются как строки.

Строка, полученная с помощью <>, содержит символ новой строки в конце, поэтому она не равна строке '12'.

!=numeric Оператор не равный, поэтому оба операнда рассматриваются как числа. В этом случае Perl игнорирует любые конечные нечисловые символы при преобразовании, поэтому новая строка игнорируется, а строка 12<newline> обрабатывается как числовая 12.

Вы до chomp полученное значение перед сравнением, оператор ne также будет работать.

+0

Получил это. Благодарим вас за то, что вы дали хорошее объяснение. – Nag

+2

Так как это связано с вводом пользователя, может быть полезно указать возможные конечные пробелы. – zdim

Смежные вопросы