At 07:07 AM 8/12/00 -0600, Tony Olekshy wrote: >Peter Scott wrote, in RFC 80 (v2): > > > > =item id > > > > Unique numeric identifier, assigned by perl developers. > >I'm loath to bother everyone with this I've redirected to perl6-language-flow. They're supposed to enjoy being bothered with it :-) >, but to me the id of an >object should be unique to each *instance* of the class. If we had > > my $e = Exception->New(id => "ABC.1234"); > my $f = Exception->New(id => "ABC.1234"); > >then $e and $f would have the same id, but be different objects. Yes, the implicit registry bothers me too - not for the core: I figure the perl developers can manage a little enumeration class - but for external stuff. CPAN could conceivably work since they already have a registry for the naming hierarchy, but what about when you want to write an in-house thingy and make sure the ids don't collide with anything else you get? Number ranges for user space (e.g., negative numbers) are all well and good, but eventually you'll have two or more separate things both living in user space but constructed independently. I was attempting to carry RFC 85 to its logical extension, but perhaps I stretched it too far. I think it's not as bad as you imply though. We could disambiguate id tags by checking the exception class name, since it's reasonable to assume that anything throwing an exception in a particular class will coordinate ids with everything else doing the same. > > Line number exception was thrown at. > > File exception was thrown in. > >Should this be line thrown at or line constructed at? Does anyone >care? There is an issue of how far up the call stack you should go. If I write main.pl: 1 try { 2 foo($obj); 3 }; 4 sub foo { 5 $_[0]->bar(); 6 } Foo.pm: 100 sub bar { 101 pling(shift); 102 } 103 sub pling { 104 throw Exception::Baz unless blech(shift); should the (file, line) be: (main.pl, 2), or (Foo.pm, 101) or (Foo.pm, 104)? Clearly if you wrote Foo.pm you'd like the last one, and if you didn't, you'd like the first one. Well, probably you'd want all of them. Hmm - what if we made line() and file() return arrays? Then we'd also like uncaught exceptions that result in program death to at least have the option of a confess() backtrace, and the data would be in the object. > > Stringifying the object itself will yield the C<message> attribute. > >Or perhaps a formatted combination of a subset of the attributes, >as in RFC 96? Or the confess() I just suggested above, yes. -- Peter Scott Pacific Systems Design Technologies