为什么在没有引号的 Perl 中的 IF 条件下无法解析数字

vin*_*k89 2 perl datetime

我有一个脚本,它将根据timeinIF条件执行某些操作。所以基本上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";
}
Run Code Online (Sandbox Code Playgroud)

让我们说现在是时候了0130,它假设打印1st IF. 但它的印刷Default IF。同样,当时间0430到了,它假设打印2nd IF. 但它的印刷Default IF

但是当我用双引号将时间值括起来时,""它就起作用了。如下图——

if (( $TIME > "0100") && ($TIME < "0300")){
Run Code Online (Sandbox Code Playgroud)

是否$TIME解析为字符串?我在$TIME想会有数字并且不需要引号。

cho*_*oba 6

正如您在perlnumber中发现的那样,以零开头的文字数字被解释为八进制数。010064并且0300是 192。

对字符串进行数字化时,前导零将被忽略。

另请参阅Time::Piece了解如何在 Perl 中处理时间而无需支付费用。

use Time::Piece;
my $time = localtime->strftime('%H%M');
Run Code Online (Sandbox Code Playgroud)