不能使用tzset和“use strict”

时间:2017-08-21 11:59:58

标签: perl localtime

我需要使用指定的时区获取当前时间,因此我正在使用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 .......

这是已知的问题吗?我可以使用任何替代方案吗?

1 个答案:

答案 0 :(得分:3)

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

要解决您的问题,请首先声明package,然后use您需要的所有模块:

use strict;

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

...

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