$? war mir schon klar, ich hatte ein logisches Problem ;)
In Fakt ist es ein bischen komplizierter, weil die Funktionen/Methoden die ich remote aufrufe nicht nur Systemaufrufe tätigen oder ins Dateisystem greifen sondern beispielsweise auch mit MySQL reden.
Idealerweise wird bei Fehlern eine Exception geworfen, die wird vom Remote-Framework aufgefangen und über den HTTP Status 502 an mein Lokales Kommandozeilen-Framework kommuniziert (todo: Status auswerten).
Da meine Remote-Funktionen auch ohne Fehlerfall ohne Return-Value zurückkommen können hab ich die Logik erweitert:
$self->{CONTENT} = $rpc->$coderef(%$in) || $? || $! || $^E || $@ || "OK";
Das sind zum Einen alle in Frage kommenden Perlvars erfasst und zum Anderen auch der Fall, dass eine Funktion im Erfolgsfall nichts zurückgibt.