..
в скалярном контексте не оператор диапазона, то оператор Триггер. Вы могли бы использовать его соответствующим образом:
while (my $line = readline $filehandle) {
# print only first three lines
if (1..3) {
print "line $.: $line\n";
}
}
Триггер возвращает ложь, пока первое условие возвращает истину (константы не обращаются неявно как нуждающаяся в сравнении с $, номер текущей строки.). Затем он продолжает возвращаться, пока второе условие не будет истинным. Таким образом, в приведенном выше примере блок if вводится только для строк с 1 по 3 ввода.
Бесконечный цикл - это то, что вы каждый раз назначаете '' $ b каждый цикл; возможно вы предназначенный ==
(сравнение), не =
(задание). Но даже это не будет работать с диапазоном, как вы пытаетесь.
Если вы хотите проверить, находится ли число в заданном диапазоне, не используйте ни оператор диапазона, ни оператор flipflop; просто сравните:
if ($b >= 1 && $b <= 3) {
не говоря уже о том, что предупреждения сгенерированные. – ysth
Спасибо всем за ваши ответы. еще одна вещь, если у меня есть два условия на левой стороне «..», тогда как это будет работать, например, #!/usr/bin/perl ## использовать предупреждения; while (<>) { if (($ c = 1 и $ b = 3) .. not $ b--) { print "значения c и b - $ c и $ b \ n"; } } какой будет диапазон «if()»? – user2896215
, если любой из операндов .. является константой, он обрабатывается так, как если бы вы сказали '$. ==' эту константу, поэтому проверяете номер строки. если операндом является любое другое выражение, это выражение оценивается как логическое. поэтому ваш пример не будет зависеть от номеров строк. обратите внимание, что ($ c = 1 и $ b = 3) всегда истинно; Вы имели в виду == not =? – ysth