[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]

Re: A common base exception object for Perl - RFC



Have you looked at the Error module on CPAN ?

At the conference last year there was a discussion about getting
better handling into the core itself. The Error module was given
as a starting point.

Graham.

On Thu, Jan 20, 2000 at 10:58:24AM +0000, Pete Jordan wrote:
> OK, I suppose somebody's gonna do it; might as well be me...
> 
> These are my initial ideas, constructive suggestions are most welcome
> bearing in mind that this is intentionally a fairly simple base class.
> 
> RATIONALE
> 
> To provide a common base exception object class for Perl to encourage
> interoperability between specific implementations. Usage of this module
> should not break any existing standard C<eval> and C<$@> processing.
> 
> NAMESPACE
> 
> I would like this to be Exception. This does, however, conflict with
> Peter Seibel's[1] exception module and intersects with Joshua
> Pritikin's[2] Exception::Cxx. This may or may not be a problem.
> 
> PROPOSED INTERFACE
> 
> 	use Exception qw(-stacktrace);
> 
> 	my $e=new Exception 'text';
> 
> 	my $f=new Exception -text=>'foo', -class=>'Error',
> 			-name=>'bar', -errcode=>$!, -exitcode=>23;
> 
> 	raise Exception 'text';
> 
> 	raise Exception -text=>'foo', -class=>'Error',
> 			-name=>'bar', -errcode=>$!, -exitcode=>23;
> 
> 	my $string=$e->render;	# overloaded from '""'
> 
> 	my $text=$e->text;
> 	my $old=$e->text('new');
> 
> 	my $class=$e->class;
> 	my $name=$e->name;
> 	my $exitcode=$e->exitcode;
> 	my $errcode=$e->errcode;
> 
> 	Exception->stacktrace($yesno);
> 	my $stack=$e->stack;
> 
> 	$e->croak;
> 	$e->confess;
> 
> There are a fair number of methods/fields in there; my guess (which may
> be wrong) is that they're the set that most people are most likely to
> want.
> 
> I'm not planning to put any code in to deal with specific values of
> class or name, I just want to provide a standard interface for anyone
> who does want to so do.
> 
> Exitcode will default as per standard C<die> processing, it's there so
> programmers can specify their own if they wish.
> 
> Errcode gets its own field so its dual nature can be retained. For
> example:
> 
> 	eval {
> 	  open FOO, '<bar'
> 	    or raise Exception "Can't read bar", -errcode=>$!;
> 	  ...
> 	};
> 
> 	print STDERR "$@\n" if $@;
> 
> might print:
> 
> 	Can't read bar: [2] No such file or directory
> 
> on failure.
> 
> IMPLEMENTATION
> 
> As you'd expect; a blessed hash reference, with:
> 
> 	use overload '""'=>sub {shift->render};
> 
> In deference to Larry, I'll not create a C<$SIG{__DIE__}> handler (by
> default at least) so:
> 
> 	eval {
> 	  die 'whatever';
> 	};
> 
> 	$@ and $@->croak;
> 
> won't work.
> 
> Pete
> 
> [1] PSEIBEL   Peter Seibel <seibel@organic.com>
> [2] JPRIT     Joshua N. Pritikin <jpritikin@pobox.com>
> -- 
> use Disclaimer::Standard;	# Motorola GSM Software Factory
> my $phone='+44 1793 564450';	# "'Not twisted,' Salzy once said of
> my $fax='+44 1793 566918';	#  her own passion, 'it is helical.
> my $mobile='+44 7973 725120';	#  That sounds better.'"


Follow-Ups from:
Pete Jordan <pjordan1@email.mot.com>
References to:
Pete Jordan <pjordan1@email.mot.com>

[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]