in reply to Confused.... question on code scalability (reusing functions, etc)

Here's some code, which allows the user to make a NOTE request, somebody else to view it and search it and reply to it. Now supposing I want to resuse all of this but more generically, say for notes & GAMES, depending on what the user clicks on ..... how would I go about doing that. BTW I've only been working with Perl for a few weeks and my code is suckky.... please dont flame me too much ... haha (grin). Thanks in advance.
sub makeRequestPage { checkMenu(); if (!$id) { templateMessage($messages[6]);} else { my $template_search = HTML::Template->new(filename => $TMPLpath.'makeR +equest.tmpl'); $template_search->param(addRequest => 1, sessionID => $sessionID, id => $id); $TMPLbody .= $template_search->output; } } sub makeRequest { checkMenu(); my ($Second, $Minute, $Hour, $DayOfMonth, $Month, $Year, $WeekDay, $Da +yOfYear, $IsDST) = localtime(time); $Month = $Month + 1; $Year = substr($Year, 1); my $date = "$Month/$DayOfMonth/20$Year"; if (($price) and (not($price =~ m/\d.\d/))) { $price = $price.".00";} if ((!$department) or (!$semester) or (!$classNumber) or (!$university +) or (!$price) or (!$memo) or (not(($classnotes) or ($announcements)) +)) { templateMessage($messages[12]); } else { my $dbh = openDB(); my $rs = CreateObject OLE "ADODB.Recordset" or die "can not create rec +ordset"; my $sql; my $requested; if (($classnotes) and ($announcements)) { $sql = "INSERT INTO classnotes (id,active,semester,department,clas +sNumber,university,price,memo,date_added,classnotes,announcements) VA +LUES ('$id',YES,'$semester','$department','$classNumber','$university +','$price','$memo','$date',YES,YES)"; $requested = "Class Notes & Announcements"; } elsif ($classnotes) { $sql = "INSERT INTO classnotes (id,active,semest +er,department,classNumber,university,price,memo,date_added,classnotes +) VALUES ('$id',YES,'$semester','$department','$classNumber','$univer +sity','$price','$memo','$date',YES)"; $requested = "Class Notes"; } elsif ($announcements) { $sql = "INSERT INTO classnotes (id,active,sem +ester,department,classNumber,university,price,memo,date_added,announc +ements) VALUES ('$id',YES,'$semester','$department','$classNumber','$ +university','$price','$memo','$date',YES)"; $requested = "Announcemen +ts"; } $rs = $dbh->Execute( $sql ) or die print ( "Can't execute +SQL statement. Perl says $!, DBI says ",$dbh::errstr,"\n"); my $template_success = HTML::Template->new(filename => $TM +PLpath.'success.tmpl'); $template_success->param( addRequestSuccess => 1, requested => $requested, semester => $semester, department => $department, classNumber => $classNumber, university => $university, price => $price, memo => $memo); $TMPLbody .= $template_success->output; $emailMessages[7] .= "\n\n\nThe information for the reques +t you added is as follows: \n\nRequested: $requested \nUniversity: $u +niversity \nSemester: $semester \nDepartment: $department \nClass Num +ber: $classNumber \nPrice: $price \nMemo: $memo"; MailMsg(getUserEmail(),$emailMessages[7],$emailSubject +[7]); $dbh->Close(); } } sub viewRequestPage { #search requests page checkMenu(); my $template_search = HTML::Template->new(filename => $TMPLpath.'makeR +equest.tmpl'); $template_search->param(viewRequest => 1, sessionID => $sessionID, id => $id); $TMPLbody .= $template_search->output; } sub viewRequest { #search requests checkMenu(); my $dbh = openDB(); my $rs = CreateObject OLE "ADODB.Recordset" or die "can not create rec +ordset"; my $sqlstatement; my $check = 0; if ($classnotes) { $classnotes=1; $check++;} if ($announcements) { $announcements=1; $check++;} if ($university) { $check++;} if ($semester) { $check++;} if ($department) { $check++;} if ($classNumber) { $check++; } $sqlstatement = "SELECT * FROM classnotes WHERE active=YES"; # Prepar +e and execute SQL statement $rs = $dbh->Execute($sqlstatement); my $num = 0; my $template_classnotesresults = HTML::Template->new(filename => $TMPL +path.'classnotesresults.tmpl'); my $template_classnotesresultsbody = HTML::Template->new(filename => $ +TMPLpath.'classnotesresultsbody.tmpl'); my $SRBody; my $rows; while (!$rs->EOF()) { my $cnID = $rs->Fields('cnID')->Value; my $classnotesTemp = $rs->Fields('classnotes')->Va +lue; my $announcementsTemp = $rs->Fields('announc +ements')->Value; my $universityTemp = $rs->Fields('university +')->Value; my $semesterTemp = $rs->Fields('semester')-> +Value; my $departmentTemp = $rs->Fields('department +')->Value; my $classNumberTemp = $rs->Fields('classNumber')-> +Value; my $price = $rs->Fields('price')->Value; #my $memo = $rs->Fields('memo')->Value; my $doubleCheck = 0; my $request = ""; if ($classnotesTemp) { $request .= "CN "; } if ($announcementsTemp) { $request .= "AN "; } if (($classnotes) and ($classnotesTemp eq $classnotes) +) { $doubleCheck ++; } if (($announcements) and ($announcementsTemp eq $annou +ncements)) { $doubleCheck ++;} if (($university) and ($universityTemp =~ m/$universit +y/gi)) { $doubleCheck ++; } if (($semester) and ($semesterTemp eq $semester)) { $d +oubleCheck ++; } if (($department) and ($departmentTemp eq $department) +) { $doubleCheck ++; } if (($classNumber) and ($classNumberTemp =~ m/$classNu +mber/gi)) { $doubleCheck ++; } #$TMPLbody .= "Double Check Search Criteria: $doubleCh +eck <br>"; if ($check == $doubleCheck) { $template_classnotesresultsbody->param( sessionID = +> $sessionID, id => $id, cnID => $cnID, request => $request, university => $universityTemp, semester => $semesterTemp, department => $departmentTemp, classNumber => $classNumberTemp +, price => $price); $SRBody .= $template_classnotesresultsbody->output; $num++; } $rs->MoveNext; } if (!$num) { templateMessage($messages[7]); } else { $template_classnotesresults->param(number => $num, classnotesresul +tsbody => $SRBody); $TMPLbody .= $template_classnotesresults->output; } $dbh->Close(); } sub viewRequestDetails { checkMenu(); if (!$id) { templateMessage($messages[6]);} else { my $dbh = openDB(); my $rs = CreateObject OLE "ADODB.Recordset" or die "can not create rec +ordset"; my $sqlstatement = "SELECT * FROM classnotes WHERE cnID=$cnID"; # Pre +pare and execute SQL statement $rs = $dbh->Execute($sqlstatement); my $classnotes = $rs->Fields('classnotes')->Value; my $announcements = $rs->Fields('announcements')->Value; my $university = $rs->Fields('university')->Value; my $semester = $rs->Fields('semester')->Value; my $department = $rs->Fields('department')->Value; my $classNumber = $rs->Fields('classNumber')->Value; my $price = $rs->Fields('price')->Value; my $memo = $rs->Fields('memo')->Value; my $request = ""; if ($classnotes) { $request .= "CN "; } if ($announcements) { $request .= "AN "; } my $template_success = HTML::Template->new(filename => $TMPLpa +th.'makeRequest.tmpl'); $template_success->param( viewRequestDetails => 1, sessionID => $sessionID, id => $id, cnID => $cnID, requested => $request, semester => $semester, department => $department, classNumber => $classNumber, university => $university, price => $price, memo => $memo); $TMPLbody .= $template_success->output; $dbh->close(); } } sub fillRequest { checkMenu(); if (!$id) { templateMessage($messages[6]);} elsif (getListerID('classnotes')==$id) { templateMessage($messages[8]) +;} else { my ($Second, $Minute, $Hour, $DayOfMonth, $Month, $Year, $WeekDay, $Da +yOfYear, $IsDST) = localtime(time); $Month = $Month + 1; $Year = substr($Year, 1); my $sellday = "$Month/$DayOfMonth/20$Year"; my $dbh = openDB(); my $rs = CreateObject OLE "ADODB.Recordset" or die "can not create rec +ordset"; my $sql = "UPDATE classnotes SET active=NO,sellerID=$id,date_ended='$s +ellday' WHERE cnID=$cnID"; #Can use ID = 1 or ID = $record $rs = $dbh->Execute($sql); my $sellerEmail = getUserEmail(); my $id = getListerID('classnotes'); my $rs2 = CreateObject OLE "ADODB.Recordset" or die "can not create re +cordset"; my $sql2 = "SELECT * FROM user WHERE id=$id"; $rs2 = $dbh->Execute($sql2); my $requestInfo = getRequestInfo(); my $fname = $rs2->Fields('first')->Value; my $lname = $rs2->Fields('last')->Value; my $email = $rs2->Fields('email')->Value; my $phone = $rs2->Fields('phone')->Value; #Buyer Info (Request Originator) templateMessage($messages[15]); my $buyer = "\nFirst Name: $fname \nLast Name: $lname \nEmai +l Address: $email \nPhone: $phone"; MailMsg($sellerEmail,$emailMessages[8].$buyer.$requestInfo,$ +emailSubject[8]); #Seller Info (Request Fulfiller) my $userData = getUserInfoFromEmail($sellerEmail); my @data = split /\//, $userData; my $seller = "\nFirst Name: $data[0] \nLast Name: $data[1] \ +nEmail Address: $sellerEmail \nPhone: $data[2]"; MailMsg($email,$emailMessages[9].$seller.$requestInfo,$email +Subject[9]); $dbh->Close(); } } sub getRequestInfo() { my $dbh = openDB(); my $rs = CreateObject OLE "ADODB.Recordset" or die "can not create + recordset"; my $sqlstatement = "SELECT * FROM classnotes WHERE cnID=$cnID"; # + Prepare and execute SQL statement $rs = $dbh->Execute($sqlstatement); my $classnotes = $rs->Fields('classnotes')->Value; my $announcements = $rs->Fields('announcements')->Value; my $university = $rs->Fields('university')->Value; my $semester = $rs->Fields('semester')->Value; my $department = $rs->Fields('department')->Value; my $classNumber = $rs->Fields('classNumber')->Value; my $price = $rs->Fields('price')->Value; my $memo = $rs->Fields('memo')->Value; my $request = ""; if ($classnotes) { $request .= "CN "; } if ($announcements) { $request .= "AN "; } $dbh->Close(); my $temp = "\n\n\nThe information for the Class Note Request in th +is transaction is as follows: \n\ncollegeshack.com CN ID: $cnID \nReq +uested: $request \nUniversity: $university \nSemester: $semester \nDe +partment: $department \nClass Number: $classNumber \nPrice: $price \n +Memo: $memo"; return($temp); }

20030217 Edit by Corion : Added readmore tags

  • Comment on Re: Confused.... question on code scalability (reusing functions, etc)
  • Download Code

Replies are listed 'Best First'.
Re: Re: Confused.... question on code scalability (reusing functions, etc)
by BUU (Prior) on Feb 16, 2003 at 08:00 UTC
    Two minor and probably utterly useless nitpicks.
    1. I would suggest standardizing on which negator you are going to use. Not or !.
    2. You really don't need parens around every single item in an if statement. if(($foo) and (not($baz=~/qux/))) is surely much easier to read as if($foo and not $baz=~/qux/)

      About "standardizing on which negator you are going to use. Not or !."...

      ...that depends on the intent of expression evaluation. Word operators (not, and, or) bind rather loosely than otherwise (!, &&, ||). Just consider the output of the following...

      perl -e 'print join(" ", (!0 && 0) , (!0 and 0) , (not 0 && 0) , (not +0 and 0))'

      It is ill advised to ask a beginner to standardise on a negator, as you put it, without mentioning the operator precedence level.

      BUU, Noted. Thanks ..... will definitely keep that in mind from now on. SP