Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Try::Catch(3)	      User Contributed Perl Documentation	 Try::Catch(3)

NAME
       Try::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.

DESCRIPTION
       A 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
       no multiple finally blocks
       try must	be followed by catch, catch then finally, or finally
	   this	behaves	exactly	as how other implementations of	try catch
	   blocks

       if there	is no catch block error	will throw
	   in case of try followed by finally block and	no catch block,
	   finally block will be fired then an exception will be thrown, this
	   is also the default behaviour of try	catch in other languages.

CAVEATS
       Same as "CAVEATS" in Try::Tiny

Benchmarks
       This 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 Also
       Try::Tiny
       TryCatch

Known Bugs
       When 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

AUTHOR
       Mamod A.	Mehyar,	<mamod.mehyar@gmail.com>

LICENSE
       This library is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself

perl v5.24.1			  2016-12-17			 Try::Catch(3)

NAME | SYNOPSIS | DESCRIPTION | Differences | CAVEATS | Benchmarks | See Also | Known Bugs | AUTHOR | LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Try::Catch&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help