perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 30
Click for quality!




11.02.2012 / 18:15

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragFehler schnapen und benutzen
Seitenanfang
bei mir kommt ein Fehler wenn ich keinen Zugriff auf irgend ein Ordner habe und zwar:

Fehler: Zyklische Kopie nicht M"GLICH

Wie könnte ich diesen Fehler als Error Handling benutzen? hier ist mein Code das nicht funktioniert:

my $Cp = system("xcopy ", $arr[$x][2], " ", $arr[$x][2], " /E /I /Y") # run in comandwindow xcopy from source to destination
if(uc($Cp == 'ZYKLISCHE KOPIE NICHT MÖGLICH'))
{
&AccessDenied($x,@arr);
&Stepfailed($x,$y,@arr); # Call fonction Stepfailed
}
else
{
Stepdone($x,$y,@arr); # Call fonction Stepdone
}

Datum: 09.05.2007-14:56

Beitragre: Fehler schnapen und benutzen
Seitenanfang
Danke ,
es hat sich erledigt.

es fehlt ein (;)

Datum: 09.05.2007-15:52

Beitragre: Fehler schnapen und benutzen
Seitenanfang
Die Funktion 'system' gibt nicht die Fehlermeldung des ausgefuehrten Befehls zurueck, sondern dessen Exit-Status (ein numerischen Wert).

Der Rueckgabewert von 'system' ist 0 wenn die Ausfuehrung erfolgreich war und groeszer 0 wenn ein Fehler aufgetreten ist, um an den tatsaechlichen Rueckgabecode des ausgefuehrten Prozesses zu kommen musst du den Rueckgabewert um 8-bit nach rechts verschieben ($? >> 8);

Wenn du auf die Fehlermeldungen reagieren moechtest, musst du qx/COMMAND/ oder die Backticks `COMMAND` verwenden damit du die Ausgabe des Prozesses in einer Variablen speichern kannst.

Datum: 09.05.2007-16:04

Beitragre: Fehler schnapen und benutzen
Seitenanfang
ich verstehe was du meinst und das ist genau was ich machen möchte aber damit ich besser verstehe:
sagen wir ich habe eine Fehlermeldung die so aussieht:
Use of uninitialized value in join at INSTALL_PLATFORM.pl line 330.

oder so:

256

wie könnte ich das in einer Variable speichern?

Datum: 10.05.2007-17:22

Beitragre: Fehler schnapen und benutzen
Seitenanfang
Das sind zwei Paar unterschiedliche Schuhe, die Fehlermeldung/Warnung ist eine Meldung vom Perl-Interpreter bei der Ausfuehrung des Scripts, also ein Syntax- oder Logikfehler im gerade ausgefuehrten Code.

Wenn du ein Perlscript ueber die 'system'-Funktion aufrufst dann wird ein Shellprozess gestartet (z.Bsp. '/bin/sh' unter Unix basierenden Systemen und vermutlich 'cmd.exe' unter Windows). Ueber diesen Shellprozess wird dann der eigentliche Befehl ausgefuehrt.

Ein Beispiel:


my $rueckgabewert = system("perl -le 'exit 1'");

Der Shellprozess der durch 'system' gestartet wird fuehrt den perl-Befehl aus, dieser gibt einen Exit-Code von '1' zurueck, so steht in diesen Fall in $rueckgabewert der Wert '1'.


my $rueckgabewert = system("perl -le 'exit 2'");

Hier gibt der perl-Prozess als Exit-Code '2', so steht dieser auch in $rueckgabewert.


my $rueckgabewert = system("perl -le 'die 'Fehler!'");

Der selbe Code nur beendet sich der perl-Prozess nun mit 'die', der Exit-Code ist nun (zumindest bei mir) '65280'.

Wie du siehst kann sich ein Perlscript durch 'exit' mit einen eigenen Exit-Code beenden, dass heiszt jeder Programmierer kann sich letztenendes selbst festlegen welchen Exit-Code er zurueck gibt. Die Zuordnung der Exit-Codes zu Fehlermeldungen steht meistens in der Dokumentation oder im Quelltext des Programms.

Nebenbei: Es muss nicht sein dass der Rueckgabewert dem entspricht, den der gestarete Befehl zurueckgibt, der Shellprozess kann auch einen davon unabhaengigen eigenen Rueckgabewert liefern. Verlassen wuerde ich mich also darauf nicht.

Wie ich im letzten Post schon geschrieben habe kommst du an die Ausgabe des ausgefuehrten Befehls nur wenn du qx/BEFEHL/ oder die Backticks `BEFEHL` verwendest. Oder du oeffnest mit 'open' eine PIPE zum Prozess von der du dann lesen kannst (siehe perldoc perlipc).

Wenn dass nicht hilft, dann gib mal ein konkreteres Beispiel, 20 Zeilen allgemeinen Perlcode der die Problematik nachbildet.

Datum: 10.05.2007-18:04

-






-
-