[Perl] Systembefehle und "or die"

anddie

Well-known member
ID: 171
L
3 Mai 2006
2.270
133
Hi,

ich habe ein Problem, wenn ich irgendwelche Systembefehle oder Shellbefehle (also alles, was in so accent grave-Zeichen eingeschlossen ist) im Fehlerfall mit einem "or die" beenden will, funktioniert das nicht. Das or die wird immer ausgeführt, egal ob der vorhergehende Befehl erfolgreich war oder nicht.

also ein `cp $datei $ziel` or die "nicht kopiert"; führt immer zur Ausgabe "nicht kopiert".
Wenn ich das Ganze in system(`cp $datei $ziel`) or die "nicht kopiert"; packe, ist es angeblich immer erfolgreich, auch wenn nichts kopiert werden konnte.

Derzeit wird halt danach die Dateigröße von beiden Dateien geprüft und falls die nicht gleich groß sind, ein Fehler ausgespuckt. Finde ich persönlich aber unschön und ich hätte es gerne mit or die gelöst.

Irgendwelche Ideen?

anddie
 
Liegt an den Rückgabewerten ... einmal wie die komplette Ausgabe des Programms zurück gegeben ( bei den Backticks ) und bei system(); der Rückgabe-Code ... da gabs irgendwelche Unix-"Richtlinien" die für CL-Tools wohl eingehalten werden sollten aber nicht werden oder was weiß ich ...

Als Lösung -> File::Copy. Gehört mein ich zum "standard" Perl dazu. Also zumindest bei ActiveState, Linux hab ich grad nicht probiert.
 
Als Lösung -> File::Copy.
Da habe ich das Problem, dass mir meine ganzen symbolischen Links zerschossen werden.
Also statt meiner Originaldatei und meiner Link-Datei hab ich dann 2 Dateien. Und irgendwie finde ich keinen Parameter dafür. Bei nem normalen Systemcopy kann ich ja mit -P die Links erhalten.

anddie
 
Sonst musst du dich von deinem or die trennen und manuell ueberpruefen.

Auszug aus dem man file zu cp:

Code:
DIAGNOSTICS
     The cp utility exits 0 on success, and >0 if an error occurs.