你可以使用任何你喜歡的圖形用戶界面選項,那麼你可以使用Tie::STDOUT至print
和printf
行爲重新定義到STDOUT文件句柄,而不是輸出轉儲到您所選擇的部件。唯一的問題是,使用匿名子將它與包中的小部件乾淨地交談可能會很麻煩。下面是使用Win32::GUI短,粗例如:
use Win32::GUI();
use Tie::STDOUT
print => sub {
$main::textfield->Append(@_);
};
my $main = Win32::GUI::Window->new(
-name => 'Main',
-text => 'Perl',
-width => 220,
-height => 230,
);
our $textfield = $main->AddTextfield(
-name => "Output",
-left => 8,
-top => 8,
-width => 180,
-height => 180,
-readonly => 1,
-multiline => 1,
-vscroll => 1,
);
$main->Show();
sub Main_Terminate {
-1;
}
if(!fork()) {
print "Hello.\n";
for (1..20) {
sleep 1;
printf "More output %d\n", $_;
}
} else {
Win32::GUI::Dialog();
}
注意最後調用Win32::GUI::Dialog()
存在,保持窗口從一旦腳本完成關閉。
這是一個好的開始。還有一個問題:在程序到達Win32 :: GUI :: Dialog之前,GUI不響應。也許我應該嘗試使用2個線程? – Jazz 2009-12-08 22:35:02
@Jazz:是的,其實你可以使用'fork()',windows的fork模擬會爲你處理。我編輯了我的答案以顯示更改。 – 2009-12-09 00:22:42