use IPC::Open3 qw( open3 ); sub run_child { my ($widget) = @_; my $pid = open3( my $to_child, # Autovivified when false. my $fr_child, # Autovivified when false. undef, # Same as $fr_child when false. $somecommand, @args ); while (<$fr_child>) { my $end_is_visible = ( $yview == 1.0 ); $text->insert('end', $_); $w->see('end') if $end_is_visible; } waitpid($pid, 0); }