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

RE: A common base exception object for Perl - RFC



Ugh.. my stupid mailer strikes again.

Try:

Inventing a second-tier of "categories" when you can just use inheritance
structure, and the addition of "special" methods seems needless & confusing.
Why say
	$@->isa('PerlError') and $@->CriticalError
instead of
	$@->isa('CriticalError')
?


		-----Original Message-----
		From:	Redford, John [mailto:John.Redford@fmr.com]
		Sent:	Friday, January 21, 2000 10:03 AM
		To:	'Pete Jordan'; Perl5 Porters
		Subject:	RE: A common base exception object for Perl
- RFC

		These don't seem like problems that you need to solve in the
'Exception'
		class. Let the author of a meaningful subclass worry about
		internationalization when writing 'to_string'.

		Inventing a second-tier of "categories" when you can just
use inheritance
		structure, and the addition of "special" methods seems
needless & confusing.
		Why say
			$@->isa('PerlError' <mailto:$@->isa('PerlError'> )
and
		$@->CriticalError <mailto:$@->critical_error> 
		instead of
			$@->isa('CriticalError'
<mailto:$@->isa('CriticalError'> )
		?

				-----Original Message-----
				From:	Pete Jordan
[mailto:pjordan1@email.mot.com]
				Sent:	Friday, January 21, 2000 6:00 AM
				To:	Perl5 Porters
				Subject:	Re: A common base exception
object for Perl
		- RFC

				Larry Wall wrote:

				> I think Perl should move toward making die
always throw an
		exception
				> object of some sort, even if the user
thinks they're only
		throwing a
				> string.  I think you should be able to say
$@->name or
		whatever without
				> testing $@ first to see if it's a ref
(unless you're
		trying to be
				> backward compatible).

				Yes. As noted elsewhere, that's the only
reason I use
		C<$SIG{__DIE__}>.

				> So to partially answer your question, I
don't want people
		inventing new
				> syntax merely because die/eval was
historically only used
		to throw
				> string exceptions.

				Agreed. Code of the C<{try {} except {}>
persuasion is
		really just
				syntactic sugar; it's neater and more
readable than using
		ordinary
				conditionals after an C<eval>, but it's not
exactly
		essential. One for
				Perl6 perhaps.

				> More important to me, however, is the
notion of
		classifying all the
				> current internal exceptions so that we can
trap them by
		name or by
				> type without relying on the English prose.
I think this
		is important
				> not so much for OO reasons, but for i18n
reasons.  Given
		that we're
				> extending internal exceptions to do this,
I don't see any
		reason why
				> the same capability shouldn't be provided
for user-thrown
		exceptions.

				I like this - locale-specific error text
with standard error
		names and
				categories would be an excellent idea.
Larry, what's your
		take on
				exception categories? The alternatives seem
to be using an
		exception
				property or the subclass name... I started
by favouring the
		former,
				moved to the latter after discussion here,
but if Perl
		itself is likely
				to define categories for standard errors,
perhaps a property
		would be
				less hassle after all.

				> What I *don't* want is for every program
to have to pull
		in a 17,000 line
				> StandardExceptions module.  This has to be
lightweight on
		the front end.

				Well, quite. Raising exceptions isn't an
issue - the object
		can be
				created on the fly in context. For querying
standard
		exceptions (say
				grabbing a locale-specific error text from
an error code),
		there may be
				no alternative to your 17,000 line module.

				OTOH, if this were done properly, there
would be a lookup
		table used at
				runtime for all internal errors... It could
be built-in at
		compile time
				if a fixed locale for a given Perl
installation is
		acceptable, otherwise
				we're talking about some sort of error
database. Aaargh. I
		suppose
				configure could allow the selection of one
or more locales
		all of which
				would be built into Perl... Dunno.

				Pete
				-- 
				use Disclaimer::Standard;
				my $phone='+44 1793 564450';    # "THIS IS
THE COMPATIBILITY
				my $fax='+44 1793 566918';      #  POLICE.
RESTORE YOUR
		ORIGINAL
				my $mobile='+44 7973 725120';   #  TOKE.C
AND BACK AWAY
		SLOWLY."


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

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