我正在分别使用线程和分支模块为Windows和Linux开发Perl多线程软件。 一切工作正常,标准输出指向shell,但是一旦我决定通过将Tk模块包含到脚本中来生成GUI,只需应用程序的Windows版本工作正常(实际上不是很好,但输出是可接受的),就像当我尝试在Linux上运行它和Forks模块以及启动脚本的简单按钮,出了点问题。
您可以在下面找到与之关联的错误消息:
***.button (1):
0 0x32bef88 IV f=00000001 undef(1)
SV = IV(0x32bef78) at 0x32bef88
REFCNT = 1
FLAGS = ()
IV = 0
Prototype mismatch: sub CORE::GLOBAL::exit (;$) vs none at /usr/local/lib/perl5/site_perl/5.26.0/x86_64-linux/forks.pm line 1509.***
原型不匹配可能与嵌入Tk和Forks模块的常见功能有关,但老实说,我不知道如何解决它。 我一直在尝试包含特定的叉子' ' Tk'功能,但无法修复它。
提前感谢您对此主题的任何帮助。
答案 0 :(得分:1)
这是forks
模块中的错误。这不是一个非常严重的问题,但问题在于forks
模块。
perl内置exit
函数应该有一个原型
$ perl -E 'say prototype "CORE::exit"'
;$
forks
模块sometimes tries to redefine the exit
function
{
no warnings 'redefine';
*CORE::GLOBAL::exit = $old_core_global_exit;
}
但它是a subroutine that was not defined with a prototype
# Keep reference to pre-existing exit function
my $old_core_global_exit;
BEGIN {
$old_core_global_exit = sub { CORE::exit(@_) };
}
同样,这不是一个严重的错误,但如果您想修复它,请编辑forks.pm
的副本以在子定义中包含原型
$old_core_global_exit = sub (;$) { CORE::exit(@_) };
如果您想要永久性修复,contact the author并制作错误报告。