in reply to Trapping errors with specificity

I have it! Sort of. I can solve for the error message part by using diagnostics.pm which has perldiag as a database of error messages. I suspect the only way to solve for the location part is by causing some unique token to be embedded in a #line "..." ... directive in the eval block. I could write this manually or I could be clever and write a Module::Compile filter to automatically insert those blocks for me. For simplicity's sake, I vote for hardcoding.

Added: The above is the dumbest "Aha!" moment ever. I mean, it's good for *nothing*. I still haven't solved my problem. I just know what I have to do to solve the problem. It's ugly and painful. Blech. I think that to get good lookups into the perldiag I'll have to write a program that throws every error imaginable and traps them. This sounds like far more grunt work than I want to do. :-/ BUMMER!.

⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊

Replies are listed 'Best First'.
Re^2: Trapping errors with specificity
by ikegami (Patriarch) on Aug 07, 2006 at 21:28 UTC

    For simplicity's sake, I vote for hardcoding.

    Hardcoding is hard.

    eval { #line 1 SpecialZone1 $code_ref->(); }; #line 23 file.pl

    You have to make sure "SpecialZone1" is unique.
    You have to make sure "23" and "file.pl" are correct.

      When I know I'm writing inside AI/Prolog/Engine/Primitive.pm and this is the eval part of perlcall2/2 I can say the following and reasonably bet that I'll get only those things meant for me. I still have the problem that I need to reset my line number after exiting the eval. On consideration, this requires automation because it is difficult to get right by hand all the time. Manual maintenance of this would *SUCK*.

      eval { #line 1 "AI::Prolog primitive: perlcall2/2" ... }; #line ??? "Primitive.pm" if ( my $e = $@ ) { if ( $e =~ m{at AI::Prolog primitive: perlcall2/2} ) { Got it! } elsif ... }

      ⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊