pl: Return Value

brauch ne Idee, mein RPC sieht z.B. so aus:

d:\> c.pl RPC -h rolfrost.de -cmd rm 768.jpg

Option --cmd also für frei einzugebende Kommandos. Die Funktion welche remote aufgerufen wird, sieht so aus

sub cmd{
    my $self = shift;
    my %in = (cwd => '', cmd => '', @_);
    chdir $in{cwd};
    qx($in{cmd});
}

gibt also nicht immer einen wahren Wert zurück. Ich brauch jedoch ein Kriterium, woran ich den Erfolg eines Remote Kommandos festmachen kann, Idee?

  1. Tach,

    Ich brauch jedoch ein Kriterium, woran ich den Erfolg eines Remote Kommandos festmachen kann, Idee?

    Werte dessen Exit-Code aus.

    mfg
    Woodfighter

  2. Moin!

    Eine Idee:

    Linux oder ein anderer Unixoid? Leite die Ausgaben des Kommandos um oder hänge an das Kommando die Anweisung, den Exit-Status des letzten Kommandos/Programmes auszugeben: kommando [optionen] [argumente]; echo $?;

    Dann hast Du eine letzte Zeile, in der bei Erfolg eine 0 steht.

    Jörg Reinholz

    1. $? war mir schon klar, ich hatte ein logisches Problem ;)

      1. $? 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.