[TxMt] tiny improvements for perlmate.rb
Hans-Joerg Bibiko
bibiko at eva.mpg.de
Thu Nov 30 10:06:15 UTC 2006
Hi Alex
On 30 Nov 2006, at 09:15, Alexander Ross wrote:
> I've just committed an improved PerlMate. PerlMate now causes perl to
> load exception_handler.pm before executing the user code.
> exception_handler.pm overrides CORE::GLOBAL::die to format unhandled
> exceptions and print them to the file descriptor given by the
> environment varibale TM_ERROR_FD. This let's us manipulate the actual
> exception objects instead of just their string representations.
>
> The implementation is very basic, as I have no actual Perl programming
> experience. But it handles `die "Sometext";` just fine. I don't know
> how it will react to the throwing of except objects.
I just checked your exception handler. It works fine as long as you
use 'die' mot in a 'eval' environment.
In Perl you often write your own handler like this:
Example:
_______________________
#!/usr/bin/perl -w
$a = 5;
$b = -1;
eval {
$c = $a / $b;
die "Denominator cannot be negative" if ($b < 0);
};
print "Run-time error: $@";
_________________________
If I run this the 'die' output never reaches your exception handler
because of
if($^S) {
CORE::die($@);
}...
Perl's $@ refers now to exception_handler.pm line 34 and this is not
what I want to see.
Why did you choose this 'if clause' to call CORE::die?
If you leave it out and take only the else clause it works. (?)
On the other hand you have a small typo in line 55 of
exception_handler.pm
corrected:
print TM_ERROR_FD '<tr><td>in <a href="txmt://open?' . $url .
'&line=' . $line . '"> ' . $display_name . "</a> at line $line<td></
tr>\n" ;
because:
print '$line' will print "$line" not the content of the variable $line.
###########
I wrote a small error/warning formatter in my posted perlmate.rb.
Would it better to use TM_ERROR_FD instead of
class PerlMate < ScriptMate
def filter_stderr(str)
...
?
-Hans
More information about the textmate
mailing list