ziggy on Mon, 15 May 2000 17:44:42 -0400 (EDT) |
Forwarded message: > From: Blake Mills <blakem@force.stwing.upenn.edu> > Subject: Re: [Chaos] OO Perl Exceptions (fwd) > To: phl@lists.pm.org > Date: Mon, 15 May 2000 17:40:36 -0400 (EDT) > > No comment on the exception handling, but I thought I'd chime in with > a project that you might find interesting. You mentioned > HTML::Embperl, but have you tried HTML::Mason? I've been using it for > quite a while now, and it works great.... http://www.masonhq.com > > -Blake > > > > > > > Ok. I was referred to this list by 2 of the members of another list (who I > > also think are members of PLUG). Regardless, I've been a perl developer for > > a little while, and have done some moderatly large projects using Perl. > > > > I've got a background with C and C++, and have found that over and over > > again, when I talk to non-perl people about the language, I keep hearing > > myself say things like: > > > > "Yes, you can do network programming in Perl." > > "Yes, you can do Object Oritented programming in Perl." > > "Yes, you can do Refactoring (XP - Martin Fowler) in Perl." > > > > Well, I've done all these things in other languages and in Perl. One thing > > I've been working on lately is taking a design for an application server > > work-alike and building it into a generic re-useable peice of software so > > other groups can use it. You can get this [Pas - Perl Application Server] > > at: > > > > http://www.bgw.org/projects/pas2/ > > > > Right now, I'm using it where I work to build a prototype website. We used > > an older generation of the same design to do a large ecommerce site, and > > had alot of success [good performance, fast development] with it. We used > > Apache/mod_perl and HTML::Embperl against Oracle. > > > > I'm trying to make the software/code look more and more OO as I go along, > > trying to use good programming techniques, yadda yadda yadda. > > > > We used Perl's exception handling (die, and if $@) in the original > > application, but it wasn't very good at recovery - only catching and > > reporting that there was an error -- and it worked very well. Having > > come from a C++ background, being able to identify types of exceptions > > to implement recovery was alot easier when it is an object instead of > > just a string (or other basic type). I also work with alot of Java > > developers who I just taught a Perl class to -- I want them to be able > > to look at the Perl code and be able to grok as much of what's going on > > as possible. > > > > Ok, whith all that background, here's the original series of replies that > > I sent out to the other lists... > > > > > > Thanks for hearing me out. > > Kyle R. Burton > > > > > > > > ---------- Forwarded message ---------- > > Date: Mon, 15 May 2000 14:16:55 -0400 (EDT) > > From: Kyle Burton <mortis@voicenet.com> > > Reply-To: chaos@neverlight.com > > To: chaos@neverlight.com > > Subject: Re: [Chaos] OO Perl Exceptions > > > > Thanks, I just subscribed to that list...I'm going to lurk for a while > > before I start posting stuff like this. > > > > I've already implemented this stuff, and decided on this syntax for now: > > > > try { > > my $base = new Pas::Base; > > throw new Pas::Exception('Test Exception.'); > > }; > > > > catch(qw(Pas::Exception e)) and eval { > > print 'caught: ',$e,"\n"; > > print 'caught: ',$e->error(),"\n"; > > print $e->stacktrace(),"\n"; > > }; > > > > catch() and eval { > > print 'caught unknown: ',$@,"\n"; > > } > > > > Not quite as clean as what I was shooting for, but it works out to be > > close enough... > > > > > > k > > > > ------------------------------------------------------------------------------ > > The nice thing about Windows is - It does not just crash, it displays a dialog > > box and lets you press 'OK' first. > > -- (Arno Schaefer's .sig) > > mortis@voicenet.com http://www.voicenet.com/~mortis > > ------------------------------------------------------------------------------ > > > > On Mon, 15 May 2000, Nicolai Rosen wrote: > > > > > Why don't you post it to philly perl mongers? Or if you don't want to > > > subscribe (it's really only a few messages a week), I can post it for you. > > > > > > On Mon, 15 May 2000, Kyle Burton wrote: > > > > Like other languages (C++, and Java), developers are used to the convienience > > > > of exception handlers. I know from Perl's fast and looseness, that we > > > > can't enforce everything at compile time, but...I've been developing > > > > largish applications in Perl for a little while now, and have used Perl's > > > > exception handling (eval is try, die is throw, and if($@) is catch) and > > > > found it to be quite serviceable -- after having used C++'s exception > > > > handling system for quite some time now. > > > > > > > > In the development of the the architecture of Pas (the application server > > > > work-alike) that I've been building, I decided to create a method called > > > > throw() on one the base class, so things now can look like this: > > > > > > > > unless($condition_to_continue_life) { > > > > $self->throw("Error, can't continue life\n"); > > > > } > > > > > > > > which is just ducky. Looks clean, and inside of throw(), the base class > > > > uses perl's built-in caller() function to build a stack trace, discover > > > > who (which module/package) threw the exception, and even at what line number. > > > > > > > > Most excellent. > > > > > > > > My mind wandered this weekend, and I thought about how the utility of this > > > > was nice to have, would extension of this concept be a good thing? Should > > > > I look into bringing this closer to the exception handling of the other > > > > languages? > > > > > > > > I toyed with the idea of using exception objects this morning, and as I > > > > suspected, you can assign an object to $@, eg: > > > > > > > > die new Foo::Exception("You're not going to beleive this, but..."); > > > > > > > > and when I did the traditional if($@), it had the object in it. So, > > > > to all the perl developers on this list (and beyond if you feel like > > > > bringing it up to other people), is this a good way of doing things? > > > > Should I pursue this path or leave things as they are? > > > > > > > > I think it'd be nice and possibly even useful feature to have. Being able > > > > to key off of the types of exceptions could end up making Perl software > > > > good at doing error recovery. I imagined code like this: > > > > > > > > ... > > > > unless(open FILE, '</etc/passwd') { > > > > $self->throw(new Pas::FileException('Error opening file: ',$!,"\n")); > > > > } > > > > ... > > > > > > > > ... > > > > eval { > > > > $foo->crack_passwords(); > > > > }; > > > > > > > > if($self->catch(Pas::FileException)) { > > > > print 'Caught FileException: ',$self->exception()->as_string(),"\n"; > > > > exit 0; > > > > } > > > > $self->rethrow(); # throw if uncaught... > > > > > > > > # equivalent of catch all... > > > > # if($@) { > > > > # die $@; > > > > # } > > > > > > > > > > > > what's the opinion of this group? Is this a symantic waste, or am I > > > > on to somthing here? > > > > > > > > k > > > > > > > > ------------------------------------------------------------------------------ > > > > The nice thing about Windows is - It does not just crash, it displays a dialog > > > > box and lets you press 'OK' first. > > > > -- (Arno Schaefer's .sig) > > > > mortis@voicenet.com http://www.voicenet.com/~mortis > > > > ------------------------------------------------------------------------------ > > > > > > > > > > Nicolai Rosen > > > nick@netaxs.com > > > Earthstation/Netaxs > > > http://laktar.dyndns.org/ > > > http://www.netaxs.com/~nick/ > > > > > > > > > > > > > > > > > > > **Majordomo list services provided by PANIX <URL:http://www.panix.com>** > > **To Unsubscribe, send "unsubscribe phl" to majordomo@lists.pm.org** > > > > **Majordomo list services provided by PANIX <URL:http://www.panix.com>** **To Unsubscribe, send "unsubscribe phl" to majordomo@lists.pm.org**
|
|