Christian Kruse: tar-archive

Beitrag lesen

Hallo Michael,

Wie kommt man denn nun am elegantesten an eine solche
Fehlermeldung (und ggf. den return code des ausge-
führten Kommandos, das würde ja auch schon helfen)?
Ich wuerde immer Backticks benutzen. Aber andere meinen da
sicher anderes :)

Um was zu erreichen?

Eine Fehlermeldung.

Gerade bei Systemkommandos interessiert "mich als
Programm" doch zuallererst mal, ob der Returncode ungleich
Null ist, viel mehr als irgend ein Meldungstext, der
womöglich sprachabhängig ist und den ich doch ganz bestimmt
nicht analysieren möchte ... ?

Den will ich ja auch gar nicht analysieren. perldoc perlvar:

$?      The status returned by the last pipe close,
               backtick (``) command, or system() operator.
               Note that this is the status word returned by
               the wait() system call (or else is made up to
               look like it).  Thus, the exit value of the
               subprocess is actually ($? >> 8), and $? & 127
               gives which signal, if any, the process died
               from, and $? & 128 reports whether there was
               a core dump. (Mnemonic: similar to sh and ksh.)

Additionally, if the h_errno variable is
               supported in C, its value is returned via $?
               if any of the gethost*() functions fail.

Note that if you have installed a signal
               handler for SIGCHLD, the value of $? will
               usually be wrong outside that handler.

Inside an END subroutine $? contains the value
               that is going to be given to exit().  You can
               modify $? in an END subroutine to change the
               exit status of the script.

Under VMS, the pragma use vmsish 'status'
               makes $? reflect the actual VMS exit status,
               instead of the default emulation of POSIX
               status.

Also see the section on Error Indicators.

Gruesse,
 CK