首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PERL Tk和Forks不匹配模块

PERL Tk和Forks不匹配模块
EN

Stack Overflow用户
提问于 2017-11-21 17:19:52
回答 1查看 74关注 0票数 0

我正在为Windows和Linux开发一个Perl多线程软件,分别使用线程和forks模块。使用指向shell的标准输出一切正常,但是,一旦我决定通过将Tk模块包含到脚本中来生成GUI,应用程序的Windows版本就可以正常工作(实际上不是很好,但输出是可以接受的),因为当我尝试在Linux上与Forks模块和启动脚本的简单按钮一起运行它时,出现了一些问题。

在下面,您可以找到与其关联的错误消息:

代码语言:javascript
复制
***.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‘函数的特定’fork‘,但是没有办法修复它。

提前感谢你在这个问题上的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-11-22 03:13:07

这是forks模块中的一个错误。这不是一个非常严重的问题,但问题出在forks模块。

perl内置exit函数应该有一个原型

代码语言:javascript
复制
$ perl -E 'say prototype "CORE::exit"'
;$

forks模块sometimes tries to redefine the exit function

代码语言:javascript
复制
{
    no warnings 'redefine';
    *CORE::GLOBAL::exit = $old_core_global_exit;
}

但它通过a subroutine that was not defined with a prototype做到了这一点

代码语言:javascript
复制
# Keep reference to pre-existing exit function
my $old_core_global_exit;
BEGIN {
    $old_core_global_exit = sub { CORE::exit(@_) };
}

同样,这不是一个严重的错误,但是如果您想修复它,请编辑您的forks.pm副本,以便在子定义中包含一个原型

代码语言:javascript
复制
    $old_core_global_exit = sub (;$) { CORE::exit(@_) };

如果你想要一个永久的修复,contact the author和做一个错误报告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47409394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档