Subject: Developers of Sympa
List archive
- From: IKEDA Soji <address@concealed>
- To: address@concealed
- Subject: Re: [sympa-developpers] Using exception
- Date: Wed, 16 Oct 2013 12:49:53 +0900
Hi all,
On Mon, 14 Oct 2013 17:16:27 +0900
IKEDA Soji <address@concealed> wrote:
> - Use of $@ without dying: Several module functions such as
> MIME::EncWords::decode_mime_words() sets $@ without dying
> (N.B. this feature is not my original but derived from MIME::Words).
>
> Soution: There seems nothing to do by our module.
It is not desirable that Sympa stops due to such "forged" exception
(How much Sympa usually receives messages with broken header-
encodings!). So I revised POD.
And I added "COMMON USAGE MISTAKES" section on my concern about
"finally" problem.
I wrote test cases, too.
May I write the code? It will takes a few days, I'll bet.
Or, will we throw away this idea? I don't mind if such decision
will be taken.
Cheers,
--- Soji
--
株式会社 コンバージョン セキュリティ&OSSソリューション部 池田荘児
〒231-0004 神奈川県横浜市中区元浜町3-21-2 ヘリオス関内ビル7F
e-mail address@concealed TEL 045-640-3550
http://www.conversion.co.jp/
=encoding us-ascii =head1 NAME Sympa::Exception - Generating and processing exceptions =head1 SYNOPSIS Defining exceptions: use Sympa::Exception 'Sympa::Exception::Foo' => { description => 'Foo occurred' }, 'Sympa::Exception::Bar' => { description => 'Bar emerged' }, ; Throwing an exception: Sympa::Exception::Foo->throw; Catching exceptions: eval { ... # Any code possibly throws exceptions ... }; if (my $e = Sympa::Exception->catch) { cleanup(); # You may have to write this. if ( $e->isa('Sympa::Exception::Foo') ) { ... } elsif ( $e->isa('Sympa::Exception::Bar') ) { ... } else { $e->throw; } } =head1 DESCRIPTION L<Sympa::Exception> provides feature to generate and process exceptions. Exceptions are captured by C<eval { }> block. catch() method consumes them. Uncaught exceptions must be re-thrown. =head2 Method =over =item Sympa::Exception->catch I<Class method>. Consumes exception, if it had been thrown. Returns caught exception object or false value. If exception does not belong to the class descended from L<Sympa::Exception::Base>, uncatchable exception (see below) will be thrown. I<Note>: Some modules (e.g. L<MIME::EncWords>, L<Text::Balanced>) may set C<$EVAL_ERROR> (C<$@>) without throwing exception. In such cases catch() outputs value of C<$@> using warn(). =back =head2 Methods of exception objects =over =item E<quot>$exceptionE<quot> I<Overridden operator>. Returns error message and traceback. By this function, exceptions never caught will output traceback to STDERR. =item $exception->isa ( CLASS_NAME ) I<Instance method>. Tests type of exception. =item Sympa::Exception::I<Subclass>->throw ( ... ) I<Class method>. Throws an exception. This is equivalent to C<die Sympa::Exception::I<Subclass>-E<gt>new(...)>. Note that the exceptions you don't wish to catch I<must> be thrown again. =back =head2 Basic exception classes =over =item Sympa::Exception::Base Base class of all exceptions on Sympa. This class I<should not> be used directly; define appropriate subclasses and use them (see below). =item Sympa::Exception::BuiltIn The exception thrown by built-in functions. To find out how to use this exception in details, see L<Sympa::Exception::AutoDie>. =item L<Sympa::Exception::Fatal> Uncatchable exception. This may be thrown when any programs of Sympa must terminate immediately. =item L<Sympa::Exception::Internal> The exception thrown from internals of Perl or external modules by die(), croak() and so on with simple scalar argument. =back =head2 How to define new exceptions There is an easy way to define arbitorary subclasses of L<Sympa::Exception::Base>: use Sympa::Exception 'Sympa::Exception::Foo' => { description => 'Foo occurred' }, 'Sympa::Exception::Foo::Bar' => { description => 'Bar emerged', isa => 'Sympa::Exception::Foo' }, ... ; You may also define subclass by orthodox manner: package Sympa::Exception::Foo; use strict; use warnings; use base qw(Sympa::Exception::Base); ... Anyway, it is I<recommended> that the names of new exception classes have the prefix C<Sympa::>, for example C<Sympa::Exception::List>, C<Sympa::List::Exception>. =head1 COMMON USAGE MISTAKES In the code eval { lock_resources(); process_probably_throws_exception(); unlock_resources(); }; if ( my $e = Sympa::Exception->catch ) { # process exceptions... } when an exception was thrown, resources will keep locked. To avoid such unhappiness, make sure that cleanup will be done at the beginning of "catch" block: ... if ( my $e = Sympa::Exception->catch ) { unlock_resources(); # peocess exceptions... } =head1 SEE ALSO L<Sympa::Exception::AutoDie>. =head1 AUTHORS Sympa developers and contributors. =cut
Attachment:
catch.t
Description: Troff document
-
Re: [sympa-developpers] Merge is over, what now?
, (continued)
-
Re: [sympa-developpers] Merge is over, what now?,
IKEDA Soji, 10/02/2013
-
Re: [sympa-developpers] Merge is over, what now?,
David Verdin, 10/02/2013
-
Re: [sympa-developpers] Merge is over, what now?,
IKEDA Soji, 10/03/2013
-
Re: [sympa-developpers] Merge is over, what now?,
Guillaume Rousse, 10/03/2013
-
[sympa-developpers] Using exception,
IKEDA Soji, 10/04/2013
-
Re: [sympa-developpers] Using exception,
Guillaume Rousse, 10/07/2013
- Re: [sympa-developpers] Using exception, Guillaume Rousse, 10/07/2013
- Re: [sympa-developpers] Using exception, IKEDA Soji, 10/21/2013
- Re: [sympa-developpers] Using exception, Guillaume Rousse, 10/21/2013
-
Re: [sympa-developpers] Using exception,
Guillaume Rousse, 10/07/2013
-
[sympa-developpers] Using exception,
IKEDA Soji, 10/04/2013
-
Message not available
- Re: [sympa-developpers] Using exception, IKEDA Soji, 10/14/2013
- Re: [sympa-developpers] Using exception, IKEDA Soji, 10/16/2013
-
Re: [sympa-developpers] Merge is over, what now?,
Guillaume Rousse, 10/03/2013
-
Re: [sympa-developpers] Merge is over, what now?,
IKEDA Soji, 10/03/2013
-
Re: [sympa-developpers] Merge is over, what now?,
David Verdin, 10/02/2013
-
Re: [sympa-developpers] Merge is over, what now?,
IKEDA Soji, 10/02/2013
-
[sympa-developpers] coding style,
Guillaume Rousse, 10/03/2013
- Re: [sympa-developpers] coding style, Guillaume Rousse, 10/07/2013
Archive powered by MHonArc 2.6.19+.