2017-08-21 98 views
1

我需要得到當前時間與我指定的時區,所以我使用tzset。但是,當我添加use strict,我收到以下錯誤不能與「使用嚴格」使用tzset

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 ....... 

這是已知的問題?有什麼替代方法可以使用?

+2

您顯示的代碼不會產生任何消息,既不是警告也不是錯誤。問題的根源必須在您未顯示的代碼中。 – PerlDuck

+0

我看,更新。 – user1289

+0

現在我得到'未定義的子程序&my_module :: tzset在......調用......' – user1289

回答

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是改變你的代碼的行爲,但不進口任何子程序編譯指示,這是無論它們是在包裝申報之前還是之後都不重要。它們的作用不僅限於一個包,而是一個詞彙範圍(用大括號分隔)。

相關問題