Nicht-druckbare Zeichen kann man generell mit dem Regexp-Konstrukt [^[:print:]] erkennen. Beispiel:
$s = join "", map { chr $_ } (0 .. 255);
$s =~ s/[^[:print:]]//g;
warn $s;
Das Problem an dieser Vorgehensweise ist, dass die Ausgabe vom eingestellten Locale abhaengig ist. In der Praxis waere es wahrscheinlich besser, wenn du nur die Zeichen von 0-31 (ausser Tab) und 127-159 entfernst.