0

我在 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 停止它,但是当我从当前模块调用它时,它工作正常。

谁能告诉我为什么会这样,我该如何解决?谢谢

4

1 回答 1

1

xsleep被作为方法调用,这意味着调用者(左侧的结果->)作为第一个参数传递。这目前以$seconds. 引用 numify 到他们的地址,所以你在$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;
    ...
}
于 2017-09-19T18:15:19.460 回答