Du hast zwei Moeglichkeiten, das Problem zu umgehen. Entweder schreibst du
$protokoll->insert('end', join "", qx($^X $proggi))
oder
for (qx($^X $proggi)) {
$protokoll->insert('end', $_);
}
Der Grund ist, dass insert immer abwechselnd Text und Tags erwartet:
$textwidget->insert($position, $text1, $tags1, $text2, $tags2, ...)