{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Thorndale};}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
{\f75\fswiss\fcharset128\fprq2{\*\panose 020b0604020202020204}Arial Unicode MS;}{\f94\fswiss\fcharset128\fprq2 @Arial Unicode MS;}{\f95\froman\fcharset238\fprq2 Times New Roman CE{\*\falt Thorndale};}
{\f96\froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Thorndale};}{\f98\froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Thorndale};}{\f99\froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Thorndale};}
{\f100\froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Thorndale};}{\f101\froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Thorndale};}{\f102\froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Thorndale};}
{\f111\fmodern\fcharset238\fprq1 Courier New CE;}{\f112\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f114\fmodern\fcharset161\fprq1 Courier New Greek;}{\f115\fmodern\fcharset162\fprq1 Courier New Tur;}
{\f116\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f117\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f118\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f697\fswiss\fcharset0\fprq2 Arial Unicode MS Western;}
{\f695\fswiss\fcharset238\fprq2 Arial Unicode MS CE;}{\f696\fswiss\fcharset204\fprq2 Arial Unicode MS Cyr;}{\f698\fswiss\fcharset161\fprq2 Arial Unicode MS Greek;}{\f699\fswiss\fcharset162\fprq2 Arial Unicode MS Tur;}
{\f700\fswiss\fcharset177\fprq2 Arial Unicode MS (Hebrew);}{\f701\fswiss\fcharset178\fprq2 Arial Unicode MS (Arabic);}{\f702\fswiss\fcharset186\fprq2 Arial Unicode MS Baltic;}{\f849\fswiss\fcharset0\fprq2 @Arial Unicode MS Western;}
{\f847\fswiss\fcharset238\fprq2 @Arial Unicode MS CE;}{\f848\fswiss\fcharset204\fprq2 @Arial Unicode MS Cyr;}{\f850\fswiss\fcharset161\fprq2 @Arial Unicode MS Greek;}{\f851\fswiss\fcharset162\fprq2 @Arial Unicode MS Tur;}
{\f852\fswiss\fcharset177\fprq2 @Arial Unicode MS (Hebrew);}{\f853\fswiss\fcharset178\fprq2 @Arial Unicode MS (Arabic);}{\f854\fswiss\fcharset186\fprq2 @Arial Unicode MS Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;
\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;
\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{
\s15\ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 \fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 \snext15 Default;}{\s16\ql \li0\ri0\nowidctlpar\tqc\tx4320\tqr\tx8640\aspalpha\faauto\rin0\lin0\itap0 
\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 \sbasedon15 \snext16 header;}{\*\cs17 \additive \fs24\cf1\lang0\langfe255\langfenp255 Numbering Symbols;}}{\info{\author Sharon Tuttle}{\operator CNRS}{\creatim\yr2004\mo8\dy2\hr14\min32}
{\revtim\yr2004\mo12\dy2\hr9\min42}{\printim\yr2004\mo11\dy18\hr11\min54}{\version6}{\edmins4}{\nofpages4}{\nofwords1281}{\nofchars7302}{\*\company CNRS-HSU}{\nofcharsws8967}{\vern8269}}\margt2093 
\deftab1250\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\nolnhtadjtbl \fet0\sectd 
\sbknone\linex0\headery1440\sectdefaultcl {\header \pard\plain \s16\ql \li0\ri0\nowidctlpar\tqc\tx4320\tqr\tx8640\aspalpha\faauto\rin0\lin0\itap0 \fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\fs16 
CIS 480 -  Homework #12 and Week 14 Lab Exercise \tab \tab p. }{\field{\*\fldinst {\fs16 \\page}}{\fldrslt {\fs16\lang1024\langfe1024\noproof 4}}}{
\par }{\fs16 Fall 2004
\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}
{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8
\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s15\qc \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 
\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\b\fs22 CIS 480 - Perl in Depth - Fall 2004
\par WEEK 14 LAB EXERCISE and Homework #12
\par 
\par Week 14 lab exercise due: Thursday,  December 2nd, END of lab
\par }\pard \s15\qc \fi-420\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {\b\fs22 HW #12 due: Thursday, December 9th, 12:00 noon
\par }\pard \s15\ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\b\fs22 ---------------------------------------------------------------------------------------------------------
\par }{\fs22 For EACH of the scripts below (lab exercise AND homework), you are required to begin EACH with the following:
\par }{\fs20 
\par }{\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2 #!/usr/bin/perl -w
\par \hich\af0\dbch\af0\loch\f2 ###480-author: }{\i\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2 yourLastName}{\fs20\loch\af2 
\par \hich\af0\dbch\af0\loch\f2 ###480-scriptname:\hich\af0\dbch\af0\loch\f2  }{\i\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2 yourScriptName}{\fs20\loch\af2 
\par }{\i\fs20\loch\af2 
\par \hich\af0\dbch\af0\loch\f2 (}{\i\fs28\loch\af2 \hich\af0\dbch\af0\loch\f2 THEN}{\i\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2  an }{\i\fs20\ul\loch\af2 \hich\af0\dbch\af0\loch\f2 opening comment block }{\i\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2 
containing the NAME of the script file, your name, the date, and a brief description of the purpose of this script)
\par 
\par }{\fs22 Note that the spacing and header need to be exact --- I hope to improve a Perl script to process these in some interesting and useful fashion. 
\par }{\b\fs22 --------------------------------------------------------------------------------------------------------
\par }\pard \s15\ql \fi-420\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {\b\fs22\ul WEEK 14 LAB EXERCISE}{\b\fs22 
\par 1.\tab }{\fs22 First of all: as mentioned in lecture on Monday, the word is that HTML::Template is indeed installed on sorrel --- but not for the version of Perl we've been using. One has to use the perl at a non-standard path, }{\b\fs22 /local/bin/perl }
{\fs22 .}{\b\fs22 
\par 
\par \tab }{\fs22 That is, the *first* line of a script on sorrel that wishes to use sorrel's installation of HTML::Template needs to be:
\par 
\par \tab }{\b\af2\fs20 #!/local/bin/perl -w}{\b\fs22 
\par }{\fs20\loch\af2 
\par }{\fs22 \tab So --- let's make sure all is well when you try to use this. Modify your lab13_template1.pl into }{\b\fs22 lab14_template1.pl}{\fs22 , making sure to:
\par }\pard \s15\ql \fi-420\li840\ri0\nowidctlpar\aspalpha\faauto\rin0\lin840\itap0 {\fs22 *\tab change its first line to that given above;
\par 
\par *\tab remove the lib pragma --- the }{\b\fs22 use lib ...}{\fs22  line that was adding the directory with our kluged HTML::Template to @INC. Now we want to use /local/bin/perl's version, and make sure that you can indeed reach its in
stallation of HTML::Template.
\par 
\par *\tab set the permissions appropriately, and make sure it works.
\par }{\b\fs22 
\par }\pard \s15\ql \fi-420\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {\b\fs22 2.\tab }{\fs22 You also need to make sure that you can reach your MySQL account, and you need to change its password from the default of }{\b\fs22 perl}{\fs22 .}{
\b\fs22 
\par 
\par \tab }{\fs22 Recall (from lecture) that your username is the same as your axe/redwood/sorrel name, and that your username is the name of the MySQL database (within sorrel's MySQL DBMS) that you have access to.
\par 
\par \tab If you replace }{\b\fs22 XXX}{\fs22  with that username, then the following should be one way to reach}{\b\fs22  }{\fs22 your}{\b\fs22  }{\fs22 MySQL database:
\par }\pard \s15\ql \fi-420\li840\ri0\nowidctlpar\aspalpha\faauto\rin0\lin840\itap0 {\fs22 *\tab log onto sorrel;
\par *\tab type the command:
\par \tab }{\b\af2\fs20 /usr/local/mysql/bin/mysql -h sorrel -u XXX -p XXX}{\b\fs22 
\par }{\fs20\loch\af2 
\par }{\fs22 *\tab (if the long path above bugs you, you can add an alias that is shorter with the command:
\par 
\par \tab }{\b\af2\fs20 alias mysql /usr/local/mysql/bin/mysql }{\b\fs22 
\par }{\fs20\loch\af2 \tab 
\par }\pard \s15\ql \fi-420\li840\ri0\nowidctlpar\tx1470\aspalpha\faauto\rin0\lin840\itap0 {\fs22 \tab If you'd
 like this done every time a new shell is started up, then add this line to the bottom of the file named .cshrc in your home directory on sorrel, and either log off and on again to bring it into effect, or type source .cshrc to bring it into effect. 

\par 
\par \tab Then you should be able to simply type }{\b\af2\fs20 mysql -h sorrel -u XXX -p XXX}{\fs22  to start up mysql...)
\par 
\par *\tab One way or the other, you should now be in a MySQL session connected to your database. Change your password within mysql with the command:
\par }{\b\fs22 
\par \tab }{\b\af2\fs20 set password = password('type desired passwd in single quotes');}{\b\fs22 
\par }{\b\fs20\loch\af2 
\par \tab }{Make sure that you set this password to something you can remember --- I do not have any way to reset your MySQL password if you forget it...}{\b\fs20\loch\af2 
\par }\pard \s15\ql \fi-420\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {\b\fs22 
\par 3.\tab }{\fs22 Now you should be able to run }{\b\fs22 lab14_mysql_table_setup.pl}{\fs22 
 (available from the course web page, in the same section this homework handout was posted) to set up versions of the HW #10/HW #11 book review tables for MySQL. (The script is posted for those who'd like to compare how it differs from lab12_table_setup.s
ql...) Do so, so that you have versions of these 3 tables.}{\b\fs22 
\par \tab 
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {\b\fs22 4.\tab }{\fs22 Updating your 480perl.html page as follows below is the last part of today's lab exercise. Remember to put these new items at the top.
\par 
\par \tab So, add the following segment of code BEFORE the HW #11 section (and directly after the first }{\af2\fs20 <ul>}{\fs22 ), }{\fs22\ul REPLACING XXX with YOUR sorrel username!!!}{\fs22 :
\par 
\par }{\fs20\loch\af2 \tab \hich\af0\dbch\af0\loch\f2 <li> HW #12
\par \tab \hich\af0\dbch\af0\loch\f2      <ul>
\par \tab \hich\af0\dbch\af0\loch\f2      <li> <a href=
\par }{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 "http://sorrel.humboldt.edu/cgi-bin/cgiwrap/}{\b\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 XXX}{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 /hw12_insert_reviewer.pl">    
\par }{\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2  \tab            hw12_insert_reviewer  </a>
\par \tab \hich\af0\dbch\af0\loch\f2    \hich\af0\dbch\af0\loch\f2   <li> <a href=
\par }{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 "http://sorrel.humboldt.edu/cgi-bin/cgiwrap/}{\b\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 XXX}{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 /hw12_insert_book.pl">    
\par }{\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2  \tab            hw12_insert_book  </a>
\par \tab \hich\af0\dbch\af0\loch\f2      <li> <a href=
\par }{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 "http://sorrel.humboldt.edu/cgi-bin/cgiwrap/}{\b\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 XXX}{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 /hw12_insert_review.pl">    
\par }{\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2  \tab            hw12_insert_review  <\hich\af0\dbch\af0\loch\f2 /a>
\par \tab \hich\af0\dbch\af0\loch\f2      <li> <a href=
\par }{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 "http://sorrel.humboldt.edu/cgi-bin/cgiwrap/}{\b\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 XXX}{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 /hw12_see_reviews.pl">    
\par }{\b\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2  \tab }{\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2            hw12_see_reviews  </a>
\par \tab \hich\af0\dbch\af0\loch\f2      <li> <a href=
\par }{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 "http://sorrel.humboldt.edu/cgi-bin/cgiwrap/}{\b\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 XXX}{\fs18\loch\af2 \hich\af0\dbch\af0\loch\f2 /hw12_funny_calc.pl">    
\par }{\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2  \tab            hw12_funny_calc \hich\af0\dbch\af0\loch\f2  </a>
\par \hich\af0\dbch\af0\loch\f2  \tab      </ul>
\par \tab \hich\af0\dbch\af0\loch\f2 <br>
\par 
\par }{\fs22 \tab }{\af2\fs20 <li> Week 13 Lab Exercise}{\fs22 
\par }{\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2         <ul>
\par \hich\af0\dbch\af0\loch\f2         <li> <a href=
\par \hich\af0\dbch\af0\loch\f2  "http://sorrel.humboldt.edu/cgi-bin/cgiwrap/}{\b\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2 XXX}{\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2 /lab14_template1.pl">    
\par \hich\af0\dbch\af0\loch\f2  \tab           lab14_template1 </a>
\par \hich\af0\dbch\af0\loch\f2    \tab     </ul>
\par \tab \hich\af0\dbch\af0\loch\f2 <br>
\par }\pard \s15\ql \fi-420\li1275\ri0\nowidctlpar\aspalpha\faauto\rin0\lin1275\itap0 {\fs22 
\par }\pard \s15\ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\fs22 When you believe you are done with the a
bove, add your name to the "NEXT" list on the board. When it is your turn, I will come and run various tests starting from your name link on the page http://www.humboldt.edu/~st10/f04cis480perl/480student_pages.html. 
\par (and, OK --- there's now a link to this from the course web page, in the "Other Course Links" section. Note that I will remove this link if anyone in class objects, however.)
\par 
\par If, by the end of lab, you have completed the above and passed the tests, then you will have met the requirements for this lab exercise. 
\par }\pard \s15\ql \fi-420\li1275\ri0\nowidctlpar\tx1290\aspalpha\faauto\rin0\lin1275\itap0 {\fs22 
\par }\pard \s15\ql \fi-420\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {\b\fs22\ul HOMEWORK #12
\par }{\b 1.\tab }{Consider the book-review tables from HW #10/HW #11. These still have the same columns as before, with the same basic types. However, it appears that, to insert a date in MySQL, you type it as 'YYYY-MM-DD' (that is, '2004-12-02').}{
\par }{\b\fs22 
\par }{\fs22 \tab Modify the provided }{\b\fs22 lab12_insert_reviewer.pl}{\fs22  into }{\b\fs22 hw12_insert_reviewer.pl}{\fs22  that inserts a new reviewer's information into your MySQL database.
\par 
\par \tab Modify your }{\b\fs22 lab12_insert_book.pl}{\fs22  into }{\b\fs22 hw12_insert_book.pl}{\fs22  that inserts a new book's information into your MySQL database.
\par 
\par \tab Modify your }{\b\fs22 hw10_insert_review.pl}{\fs22  into }{\b\fs22 hw12_insert_review.pl}{\fs22  that inserts a new review into your MySQL database. Make sure that }{\b\fs22 hw12_insert_review.pl}{\fs22 :
\par }\pard \s15\ql \fi-420\li840\ri0\nowidctlpar\aspalpha\faauto\rin0\lin840\itap0 {\fs22 *\tab uses your }{\b\fs22 DateStuff.pm}{\fs22  module from H
W #11 to "compute" the current date for the review, expressing it in the different MySQL format mentioned above 
\par }\pard \s15\ql \li840\ri0\nowidctlpar\aspalpha\faauto\rin0\lin840\itap0 {\fs22 ('YYYY-MM-DD').
\par }\pard \s15\ql \fi-420\li840\ri0\nowidctlpar\aspalpha\faauto\rin0\lin840\itap0 {\fs22 
\par *\tab since the foreign keys we've put in are not enforced in our version of MySQL (newer versions can be set up to do so, please note!), your Perl code will have to "enforce" them instead.
\par 
\par \tab That is, make sure that there IS a book with the given ID and a reviewer with the given ID before you insert the review. 
\par }{\b\fs22 
\par \tab }{\fs22 How can you do this? For the book, if you populate a drop-down from the database, then your component choice assures that only "good" book_id's can be entered. No further checking is necessary.
\par 
\par \tab However, reviewer_id was required to be entered --- and you might have required book_id to be entered, also (since you had several options in that regard). For these, you'll need to write a query such as, for example, 
\par }{\fs22\loch\af2 \tab \tab }{\b\fs20\loch\af2 \hich\af0\dbch\af0\loch\f2 select *}{\b\fs22\loch\af2 
\par }{\b\fs20\loch\af2 \tab \tab \hich\af0\dbch\af0\loch\f2 from   reviewer
\par \tab \tab \hich\af0\dbch\af0\loch\f2 where  reviewer_id = $entered_reviewer_id
\par }{\fs20\loch\af2 \tab }{to see if there is any such reviewer. If this query returns a row, you're fine; if the query returns no rows, this review should not be accepted.}{\fs20\loch\af2 
\par }\pard \s15\ql \fi-420\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {\b\fs22 
\par 2.\tab }{\fs22 Finally, modify hw10_see_reviews.pl into hw12_see_reviews.pl, to allow you to see your MySQL version's reviews.\tab 
\par }{\b\fs22 
\par }{\b 3.\tab }{You really need to practice an }{\b eval}{ block, even if in a flaky way...}{\b 
\par }{
\par \tab Write a CGI Perl script }{\b hw12_funny_calc.pl}{ that meets the following criteria:
\par }\pard \s15\ql \fi-420\li840\ri0\nowidctlpar\aspalpha\faauto\rin0\lin840\itap0 {*\tab it includes your name noticeably *within* the web page (not in the title bar, please)
\par 
\par *\tab it contains a textfield, then 4 radio buttons, then a textfield, and then a }{\b Submit}{ button; (arrange these in some legible arrangement of your choice);
\par 
\par *\tab the first and second textfields are intended to be where the user enters two numeric values. The 4 radio buttons should be labeled as +, -, *, /}{\b .}{
\par }{\b 
\par \tab }{When the Submit button is pushed, the script will try to perform the indicated operation on the indicated values, and display the result on the window in some fashion. }{\b 
\par }{
\par \tab HOWEVER --- since so much can go wrong with this, grabbing the parameters and performing this computation should be performed within an }{\b eval block}{. 
\par \tab 
\par \tab And, if grabbing the parameters or performing the computation throws a fatal error, instead of dying, a complaining message should simply be written to the web page that includes the fatal error's error message.
\par }\pard \s15\ql \fi-420\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {\tab 
\par }\pard \s15\ql \fi-15\li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\fs22 When you are done, make sure that the }{\b\fs22 hw12_insert_reviewer,  hw12_insert_book, hw12_insert_review,  hw12_see_reviews, }{\fs22 and}{\b\fs22  hw12_funny_calc}{\fs22 
 links from }{\b\fs22 480perl.html}{\fs22  do indeed successfully run those respective scripts. Make sure that the corresponding scripts are NOT world-readable (711 should make them executable but not readable.) 
\par }\pard \s15\ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\fs22 
\par And, }{\b\fs22 read  hw12_insert_reviewer.pl,  hw12_insert_book.pl, hw12_insert_review.pl,  hw12_see_reviews.pl, }{\fs22 and}{\b\fs22  hw12_funny_calc.pl}{\fs22   into an e-mail message with the Subject }{\b\fs22 480 hw 12}{\fs22 
, and e-mail it, NOT as an attachment, to st10@humboldt.edu by the due date and time given above. 
\par }{\fs20 
\par }}