2015-06-08 6 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 скриптами и будет только сбой, если программа уже ввела MainLoop перед вызовом exit. Кто-нибудь знает, что здесь происходит?


Perl Информация о версии:

Perl Version

+0

Как насчет добавления '$ mw-> g_destroy' перед' exit'? – choroba

+0

Я предполагаю, что это работает, но все же почему это может быть сбой интерпретатора, если вы вручную не вручную уничтожаете окно? Предполагается, что Perl сможет очистить и уничтожить само окно. – tjwrona1992

+2

Во время глобального уничтожения объекты могут быть уничтожены в любом порядке. – choroba

ответ

1

Представляется, что эта проблема началась, когда я перешел с 64-битной Perl 32 бит Perl. Переключение на 64-битную версию Perl решило проблему.

Стоит отметить, что решение choroba для уничтожения главного окна с использованием g_destroy перед выходом разрешило проблему даже при запуске 32-битной версии Perl. Также, вероятно, лучше всего вручную уничтожить свое окно перед выходом, даже если Perl может самостоятельно его очистить ... вы никогда не знаете, какую версию Perl кто-то пытается запустить ваш скрипт, возможно, будет!

Смежные вопросы