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