Thread fehler abfangen mit eval (13 answers)
Opened by supersucker at 2005-06-17 19:58

supersucker
 2005-06-17 19:58
#55522 #55522
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
hi zusammen,

ich hab mir einen parser geschrieben, der alle datensätze aus gegebenen dateien einliest.
manche dieser datensätze sind nun fehlerhaft, und genau die möchte ich überspringen, dabei verhält sich aber "eval" nicht so wie ich das erwartet habe.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/perl

use warnings;
use strict;

# ein paar hundert zeilen code dazwischen.....

SKIPFRAG: while(.....)
eval {

# extract Primary Structure 1 Letter-Code

$primaryStructureSubStr = substr($primaryStructure1L, $k, $fragmentLength);

# extract quartary structure chain

$quartaryStructureSubStr = substr($quartaryStructureChainS, $k, $fragmentLength);

# create secondary structure substring

$secondaryStructureSubStr = substr($secondaryStructureS, $k, $fragmentLength);

};
if($@) {
print "skipping fragment \n";
$k++;
next SKIPFRAG;
}


wenn ein datensatz fehlerhaft krieg ich bei den "substr"-aufrufen im eval-block haufenweise fehlermeldungen (substr out of range usw, was ja auch ok ist, denn ich weiss das manche datensätze fehlerhaft sind), was ich aber möchte ist, das zum einen keine fehlermeldungen kommen (ich dachte ein eval würde die unterdrücken), zum anderen soll der datensatz übersprungen werden und der nächste datensatz eingelesen werden.
seltsammerweise aber scheint es so, als würde der if-block niemals betreten werden, die print-anweisung

Code: (dl )
print "skipping fragment \n";


im if-block wird nicht auf stdout geschrieben, aber es werden haufenweise exceptions im eval-block geworfen.
ich dachte alle fehler die im eval-block auftauchen werden unterdrückt, bzw. deren ausgabe wird unterdrückt, die variable $@ wird gesetzt und ich kann mich dann zur laufzeit um die fehlerbehandlung kümmern...
ja, aber wie schon gesagt, der if-block scheint nie betreten zu werden....

hab ich bei der fehlerbehandlung mit eval was falsch verstanden?
wenn ja, wie schaffe ich es zum einen die ausgabe der fehler im eval-block zu unterdrücken bzw. zum nächsten datensatz zu springen?

danke im voraus

View full thread fehler abfangen mit eval