|
NAMETry::Catch - Try Catch exception handler based on Try::Tiny But faster SYNOPSIS use Try::Catch;
try {
die "something went wrong";
} catch {
} finally {
##some cleanup code
}; ##<--- semi colon is required.
DESCRIPTIONA small, fast, try catch blocks for perl, it's inspired and mostly copied from Try::Tiny but with some modifications to boost execution speed, see "Benchmarks". I published a new module instead of contributing to Try::Tiny directly because I had to break some features available in Try::Tiny some to boost speed and some because I didn't like. Differences
CAVEATSSame as "CAVEATS" in Try::Tiny BenchmarksThis is not totally fair but please consider Try::Catch a stripped Try::Tiny version with no blessing and no usage of Sub::Name, so it must be faster, right! :) This is a simple test with just a try catch blocks with no exception | Module: | Rate | % |
|-------------------------------------------|
| Try::Tiny | 98425/s | -68% |
| Try::Catch | 304878/s | 210% |
Test with Try Catch, Finally Blocks, No Exception | Module: | Rate | % |
|-------------------------------------------|
| Try::Tiny | 60423/s | -75% |
| Try::Catch | 245700/s | 304% |
Test with Try, Catch, Finally Blocks, AND Exception | Module: | Rate | % |
|-------------------------------------------|
| Try::Tiny | 41288/s | -65% |
| Try::Catch | 116414/s | 182% |
I've also tested against TryCatch and the results were good, considering that TryCatch is an XS module | Module: | timing 500000 iterations |
|----------------------------------------------------------------------- |
| TryCatch | 1 secs (0.58 usr + 0.00 sys = 0.58 CPU) @ 865051.90/s |
| Try::Catch | 2 secs (1.73 usr + 0.00 sys = 1.73 CPU) @ 288350.63/s |
| Try::Tiny | 6 secs (6.16 usr + 0.02 sys = 6.17 CPU) @ 81011.02/s |
Benchmarks included in this dist inside bench folder See AlsoKnown BugsWhen doing block jump from try { } or catch { } then finally will not be called. For example use Try::Catch;
for (1) {
try {
die;
} catch {
goto skip;
} finally {
#finally will not be called
print "finally was called\n";
}
}
skip:
finally will work in most cases unless there is a block jump (last, goto, exit, ..) so I recommend avoid using finally at all as it's planned to be removed in v2.0.0 AUTHORMamod A. Mehyar, <mamod.mehyar@gmail.com> LICENSEThis library is free software; you can redistribute it and/or modify it under the same terms as Perl itself
|