Nathan Gray wrote:
I believe what you are considering is object-oriented programming, which can make a lot of sense, if you build your objects correctly. You decide which information is allowed to be stored in the object, and which methods (functions) will be handled internally by the object. Then you just pass around one variable, usually called '$self'. When you want a dbh, you could run:
my $dbh = $self->dbh;
That's it ! Great idea. Thus, there will be only a few things to change in koha. Every script starts with my $param_object = buildparam->new(); Every C4 sub is called with $result = C4Function($param_object,$other_param1, $other_param2,...); And every C4 sub needs only to have 2 lines rewritten : sub MySub(); my ($param,$other1, $other2) = @_; my $dbh = $param->dbh; instead of sub MySub(); my ($dbh,$other1, $other2) = @_; If in a C4 sub we need an other parameter, we can use : my $HashOfStopWord = $param->stopwordlist(); and work with HashOfStopWord.
The 'dbh' method would know how to get a new database handle, or would return the existing one, if it has already made a connection.
Very nice idea too. With this one, we fill, for example stopword list only when ->stopwordlist() is called : no unuseful DB readings. Note that the DB handle is so necessary that i think this one should always be created when object is created.
You could very easily create a 'prepare' method in self, that would in turn run 'prepare' on the dbh. sub prepare { my $self = shift; my $query = shift || return; my $dbh = $self->dbh || return; my $sth = $dbh->prepare($query); unless ($sth) { warn $dbh->errstr; } return $sth; } Each method would handle its own error handling, when appropriate. Adding methods for 'param' and 'stopwords' would also be really easy. Let me know if you need any help, if you decide to go this route. I now write most of my code in an object-oriented style, because I find it much easier to keep track of where everything is. Then you can also inherit methods from other objects, and all sorts of fun stuff (perhaps down the road a ways).
I'm very poor at Perl-OOP, so any help is greatly welcomed ;-) Give an object with db handle and stopwords management, i'll copy/paste for other tables if you don't do. Don't you have a cvs account on sourceforge ?
kolibrie
I think we've got a winner at Perl Programming... (twice winning in 1 week. Kudos Nathan ;-) ) -- Paul