Самый простой способ считать число числовым в perl? - PullRequest
5 голосов
/ 16 ноября 2011

У меня есть условие:

next if ( ! ($x or $y or $z) );

Логика проверки заключается в том, что по крайней мере один должен быть численно ненулевым, чтобы продолжить цикл.

Я верю, что они на самом деле числа.

Проблема в том, что perl хранит плавающие данные как строки внутри. Таким образом, проверка на ! $x, где $x='0.00' на самом деле не оценивается как истина: my $x = 0.00; if ( ! $x ) { never_gets_here(); }

Какой самый простой способ заставить числовую оценку переменной, не делая строку слишком многословной?

Ответы [ 5 ]

10 голосов
/ 16 ноября 2011

Я не уверен, откуда вы взяли, что Perl хранит плавающие строки.Плавания и строки - это разные вещи:

perl -le 'print 1 if 0.00'
perl -le 'print 2 if "0.00"'
2

Если вы хотите наложить числовой контекст на неизвестный скаляр, вы можете просто добавить к нему ноль, например

unless ( $x + 0 ) { ... }
8 голосов
/ 16 ноября 2011

Если вы хотите проверить, является ли число ненулевым, для этого есть оператор:

next if (! ($x != 0 or $y != 0 or $z != 0) )

    $x       bool $x      $x != 0
 --------   --------    ----------------------------
    0        false       false
  '0.00'     true        false
  '0E0'      true        false
  'string'   true        false, generates 'non-numeric' warning
    ''       false       false, generates 'non-numeric' warning
   undef     false       false, generates 'non-numeric' warning
4 голосов
/ 16 ноября 2011

Чтобы проверить, что число имеет ненулевое значение, вы можете просто добавить 0:

$ perl -e "print '0.02' + 0;"
0.02

и

$ perl -e "print '0.00' + 0;"
0

, что является ложным значением в Perl:

$ perl -e "print (('0.00' + 0) ? 'true' : 'false');"
false
2 голосов
/ 16 ноября 2011

Добавьте ноль (0) к переменной (так же, как в «awk»).

0 голосов
/ 17 ноября 2011

Вы можете использовать следующий ярлык, если нет (или исключительно) отрицательных значений, что imho чище, чем добавление нуля к каждому отдельному значению:

next if ( $x + $y + $z == 0 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...