Exceptions.pm
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:3k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Exception utility functions and common exception objects
  3. #
  4. #  Copryight (c) 2006 OpenKore Development Team
  5. #
  6. #  This software is open source, licensed under the GNU General Public
  7. #  License, version 2.
  8. #  Basically, this means that you're allowed to modify and distribute
  9. #  this software. However, if you distribute modified versions, you MUST
  10. #  also distribute the source code.
  11. #  See http://www.gnu.org/licenses/gpl.html for the full license.
  12. #########################################################################
  13. ##
  14. # MODULE DESCRIPTION: Exception utility functions and common exception objects.
  15. #
  16. # This module provides some exception utility functions, to be used in combination
  17. # with <a href="http://cpan.uwinnipeg.ca/htdocs/Exception-Class/Exception/Class.html">Exeption::Class</a>.
  18. #
  19. # It also defines the following commonly-used exception objects:
  20. # `l
  21. # - ArgumentException - An invalid argument is passed to a function.
  22. # - ModuleLoadException - A Perl module cannot be loaded.
  23. # - ClassLoadException - A class cannot be created.
  24. # - IOException - Input/output exception occured.
  25. # - FileNotFoundException - A file is not found.
  26. # - SocketException - An error occured during a socket operating, such as connecting to a server.
  27. # - BusNotRunningException - The OpenKore bus system is not running.
  28. # - DataFormatException - The data format is invalid.
  29. # - UTF8MalformedException - Invalid UTF-8 data encountered.
  30. # `l`
  31. package Utils::Exceptions;
  32. use strict;
  33. use Exporter;
  34. use base qw(Exporter);
  35. use Scalar::Util;
  36. use Exception::Class (
  37. 'ArgumentException',
  38. 'ModuleLoadException'    => { fields => 'module' },
  39. 'ClassCreateException'     => { fields => 'class' },
  40. 'IOException',
  41. 'FileNotFoundException'  => { isa => 'IOException', fields => 'filename' },
  42. 'SocketException'        => { isa => 'IOException' },
  43. 'BusNotRunningException' => { isa => 'IOException' },
  44. 'ProtocolException'      => { isa => 'IOException' },
  45. 'DataFormatException',
  46. 'UTF8MalformedException' => { isa => 'DataFormatException', fields => ['textfileline', 'textfile'] }
  47. );
  48. our @EXPORT = qw(caught);
  49. ##
  50. # Object caught(class1, [class2, class3, ...])
  51. # classN: The class name of an exception object.
  52. #
  53. # Checks whether the currently caught exception ($@) is one of the types
  54. # specified in the parameters. Returns $@ if it is, undef otherwise. This
  55. # function is allows you to write in try-catch-style syntax.
  56. #
  57. # This symbol is exported by default.
  58. #
  59. # Example:
  60. # eval {
  61. #     SomeException->throw(error => "foo");
  62. # };
  63. # if (my $e = caught("SomeException")) {
  64. #     print "SomeException caught: " . $e->error . "n";
  65. # } elsif (my $e = caught("OtherException")) {
  66. #     print "OtherException caught: " . $e->error . "n";
  67. # } elsif (my $e = caught("YetAnotherException1", "YetAnotherException2")) {
  68. #     print "Caught YetAnotherException1 or YetAnotherException1.n";
  69. # } elsif ($@) {
  70. #     # Rethrow exception.
  71. #     die $@;
  72. # }
  73. sub caught {
  74. my $e = $@;
  75. foreach my $class (@_) {
  76. if (UNIVERSAL::isa($e, $class)) {
  77. return $e;
  78. }
  79. }
  80. return undef;
  81. }
  82. 1;