windows上的perl粘在另一个模块上呼吁使用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 secondsn";
    $seconds = $seconds * 1000000;
    usleep($seconds);
    #print "slept:$seconds micro secondsn";
    return 0;
}

当我称之为XSleep(从另一个模块)时,系统被卡住了,我只能通过ctrl c停止它,但是当我从当前模块调用它时,它可以正常工作。

谁能告诉我为什么这是什么,我该如何修复?谢谢

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

相关内容

  • 没有找到相关文章

最新更新