in reply to Processing STDOUT of a called perl script during execution

Was test3 suppose to actually run in the terminal?

I do not think what you wrote will work this way (it didn't for me).

However, if we change test3.pl to produce something simple with a delay (sleep) like this:
#!/usr/bin/perl -w # the new test3.pl use strict; $|=1; #NECESSARY print "Write something: \n"; my $it=1; until ($it == 5) { print "line $it...\n"; sleep 1; $it++ }
Then your problem becomes comprehensible: run alone, this test3 produces five lines of text 1 second apart, but run from test.pl (the Tk) you wait five seconds and then see the five lines.

In addition to adding "$|=1;" to test3.pl, you need to add this Tk command to test.pl, in the loop after the text insert:
$text_box -> insert ("end", $_); $main->update;
Now you can watch the five lines appear one at a time, the same way they would if they were logging a time-consuming process.