2015-06-08 41 views
1

我遇到一个问题,即退出Perl Tkx脚本会导致Perl命令行解释器崩溃。Perl命令行解释器在出口处崩溃

例:

use strict; 
use warnings; 
use Tkx; 

my $mw  = Tkx::widget->new('.'); 
my $button = $mw->new_ttk__button(-text => "Hello", -command => \&main); 

Tkx::pack($button); 

Tkx::MainLoop; 

sub main { 
    print "TESTING\n"; 
    exit 0; 
} 

此代码生成以下输出:

Main Window

点击“你好”按钮调用main()子程序其中打印“测试”,然后试图退出并崩溃命令行解释器:

Error Message

这似乎只发生在Tkx脚本上,只会在调用exit之前程序已经进入MainLoop时才会崩溃。有人知道这里发生了什么吗?


Perl版本信息:

Perl Version

+0

在'exit'之前加'$ mw-> g_destroy'怎么办? – choroba

+0

我想那是行得通的,但如果你不先手动销毁窗口,为什么会崩溃解释器? Perl应该能够清理并销毁窗口本身。 – tjwrona1992

+2

在全球销毁期间,物品可能会以任何顺序销毁。 – choroba

回答

1

看来,这个问题开始时,我从64位的Perl切换到32位的Perl。切换回64位版本的Perl解决了这个问题。

值得注意的是,在退出之前使用g_destroy破坏主窗口的choroba解决方案即使在运行32位版本的Perl时也能解决问题。此外,在退出之前手动销毁窗口可能是更好的做法,即使Perl可以自行清理窗口......您永远不会知道别人尝试运行您的脚本的Perl版本可能有哪些!