我在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来停止它,但是当我从当前模块调用它时它工作正常。
任何人都能告诉我为什么会这样,我该如何解决? 感谢
答案 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;
...
}