不能将 tzset 与 "use strict" 一起使用

Can't use tzset with "use strict"

我需要获取指定时区的当前时间,所以我使用 tzset。但是当我添加 use strict 时,出现以下错误

use strict;

use POSIX qw(tzset);

......................

sub is_active
{
    tzset;
    $ENV{TZ} = 'America/New_York';

    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
    if (($hour > 9 && $min > 30) || ($hour < 14))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

Bareword "tzset" not allowed while "strict subs" in use at .......

这是已知问题吗?我可以使用其他替代方法吗?

当您从 use POSIX qw(tzset) 等模块导入子例程时,导入的子例程将导入到 当前包 中。如果不声明包,那就是main包。

要解决您的问题,请先声明一个 package,然后 use 您需要的任何模块:

use strict;

package MyModule;
use POSIX qw(tzset);  # now tzset is available within MyModule

...

对于像 use strictuse warnings 这样改变代码行为方式但不导入任何子例程的编译指示,它们出现在包声明之前还是之后并不重要。它们的作用不限于包,而是词法范围(由花括号分隔)。