窗户上的perl卡在从另一个模块调用usleep

时间:2017-09-19 05:53:56

标签: windows perl perl-module usleep

我在Windows环境中使用以下perl代码:

use Time::HiRes qw(usleep);

    #(some code here)

$self->{GLOBAL_OBJ}->xsleep($delay) if($delay);


sub xsleep {    
    my $seconds = shift;
    #print "will sleep:$seconds seconds\n";
    $seconds = $seconds * 1000000;
    usleep($seconds);
    #print "slept:$seconds micro seconds\n";

    return 0;
}

当我像这样调用xsleep(来自另一个模块)时系统卡住了,我只能通过ctrl + c来停止它,但是当我从当前模块调用它时它工作正常。

任何人都能告诉我为什么会这样,我该如何解决? 感谢

1 个答案:

答案 0 :(得分:1)

xsleep被称为方法,这意味着调用者(->左侧的结果)作为第一个参数传递。这目前最终在$seconds。引用数字为其地址,因此您在$seconds中获得了非常大的数字。例如,

$ perl -e'CORE::say(0+{})'
9304720

调整xsleep以便可以将其作为方法调用

$self->{GLOBAL_OBJ}->xsleep($delay) if $delay;

sub xsleep {    
    my $self    = shift;
    my $seconds = shift;
    ...
}

或将xsleep称为子

The::Package::xsleep($delay) if $delay;

sub xsleep {    
    my $seconds = shift;
    ...
}