Also irgendwas geht da bei dir ganz gewaltig schief. Aber versuch doch mal folgende Zeilen:
open (SU, "su $username > /dev/null");
Dann sollte jede Ausgabe unterdrückt werden. Oder dann gibt es noch so ne Funktion namens IPC::open2, oder so was ähnliches.
Funktioniert leider beides nicht. Merkwürdig finde ich auch die Ausgabe des folgenden Scriptes:
print STDOUT "<!--";
sleep 10;
open(SU,"su $username");
print SU $password;
close(SU);
print STDOUT "-->";
Ausgabe: Password: <!---->