Почему числа не разрешаются в условии ЕСЛИ в Perl без кавычек - PullRequest
2 голосов
/ 06 августа 2020

У меня есть сценарий, который будет выполнять определенный набор операций на основе условия time в IF. Таким образом, в основном IF будет искать текущее время, то есть часы и минуты.

Вот сценарий:

use strict;
use warnings;

my $TIME = `date '+%H%M'`;
chomp $TIME;

print $TIME."\n";

if (( $TIME > 0100) && ($TIME < 0300)){
        print "1st IF\n";
} elsif (( $TIME > 0300) && ($TIME < 0500)){
        print "2nd IF\n";
} else {
        print "Default IF\n";
}

Допустим, теперь время 0130, и предполагается, что печать 1st IF. Но его печать Default IF. Точно так же, когда время 0430 и предполагается, что вы напечатаете 2nd IF. Но его печать Default IF.

Но когда я заключаю значение времени в двойные кавычки "", он работает. Как показано ниже -

if (( $TIME > "0100") && ($TIME < "0300")){

Разрешается ли $TIME как строка? Я думал, что $TIME будет иметь числа и не требует кавычек.

Ответы [ 2 ]

6 голосов
/ 06 августа 2020

Как вы можете найти в perlnumber , буквальные числа, начинающиеся с нуля, интерпретируются как восьмеричные числа. 0100, следовательно, 64, а 0300 - 192.

При нумерации строки ведущие нули игнорируются.

См. Также Time :: Piece on как обрабатывать время в Perl без необходимости раскошеливаться.

use Time::Piece;
my $time = localtime->strftime('%H%M');
4 голосов
/ 06 августа 2020

Time :: Piece является стандартной частью дистрибутива Perl с Perl 5.10 (в 2002 году). Если вы используете правильный инструмент для работы, тогда все станет намного проще: -)

use Time::Piece;

my $hour = localtime->hour;

if ($hour > 1 and $hour < 3) {
  # do something
} elsif ($hour > 3 and $hour < 5) {
  # do something else
} else {
  # do the default thing
}

Обновление: Вам даже не нужно использовать Time :: Piece. Достаточно легко получить час из localtime().

my $hour = (localtime)[2];

# The rest of the code is the same as my previous example
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...