#!/usr/bin/perl use strict; use warnings; use Tk; require Tk::ROText; $|++; {# Main my $mw = MainWindow->new(); $mw->Label(-text => 'STDOUT')->pack(-side => 'top', -anchor => 'w'); my $ro_out_text = $mw->Scrolled('ROText', -scrollbars => 'osoe', -background => 'white', -width => 50, -height => 15, )->pack(-side => 'top'); tie (*STDOUT, 'Tk::ROText', $ro_out_text); $mw->Label(-text => 'STDERR')->pack(-side => 'top', -anchor => 'w'); my $ro_err_text = $mw->Scrolled('ROText', -scrollbars => 'osoe', -background => 'white', -width => 50, -height => 15, )->pack(-side => 'top'); tie (*STDERR, 'Tk::ROText', $ro_err_text); $mw->update(); $mw->after(10, [\&printer, $mw]); $mw->repeat(50, sub { $mw->update();}); MainLoop; } sub printer { my $mw = shift @_; my $errcount = 0; my $count = 0; while (1) { if (rand() % 2){ $count++; print "STDOUT: Count = $count\n"; } else { $errcount++; print {*STDERR} "STDERR: Count = $errcount\n"; } sleep (rand() % 500 + 500); } }