PERL Tk和Forks不匹配模块

时间:2017-11-21 09:19:52

标签: perl

我正在分别使用线程和分支模块为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'功能,但无法修复它。

提前感谢您对此主题的任何帮助。

1 个答案:

答案 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并制作错误报告。