1 <HTML> 2 <HEAD> 3 <TITLE>2000年3月の予定</TITLE> 4 </HEAD> 5 <BODY BGCOLOR="#FFFFFF"> 6 [<A HREF="perl02.html">「出力の工夫」に戻る</A>] 7 <CENTER> 8 <H1>2000 年 3 月</H1> 9 <TABLE BORDER BGCOLOR="#C0C0FF"> 10 <TR BGCOLOR="#80FF80"> 11 <TH WIDTH="100">日</TH> 12 <TH WIDTH="100">月</TH> 13 <TH WIDTH="100">火</TH> 14 <TH WIDTH="100">水</TH> 15 <TH WIDTH="100">木</TH> 16 <TH WIDTH="100">金</TH> 17 <TH WIDTH="100">土</TH> 18 </TR> 19 <TR> 20 <TD VALIGN="top" WIDTH="100" > <BR></TD> 21 <TD VALIGN="top" WIDTH="100" > <BR></TD> 22 <TD VALIGN="top" WIDTH="100" > <BR></TD> 23 <TD VALIGN="top" WIDTH="100" >1 <BR></TD> 24 <TD VALIGN="top" WIDTH="100" >2 <BR></TD> 25 <TD VALIGN="top" WIDTH="100" >3 <BR></TD> 26 <TD VALIGN="top" WIDTH="100" >4 <BR></TD> 27 </TR> 28 <TR> 29 <TD VALIGN="top" WIDTH="100" >5 <BR></TD> 30 <TD VALIGN="top" WIDTH="100" >6 <BR></TD> 31 <TD VALIGN="top" WIDTH="100" >7 <BR></TD> 32 <TD VALIGN="top" WIDTH="100" >8 <BR></TD> 33 <TD VALIGN="top" WIDTH="100" >9 <BR></TD> 34 <TD VALIGN="top" WIDTH="100" >10 <BR></TD> 35 <TD VALIGN="top" WIDTH="100" >11 <BR></TD> 36 </TR> 37 <TR> 38 <TD VALIGN="top" WIDTH="100" >12 <BR></TD> 39 <TD VALIGN="top" WIDTH="100" >13 <BR></TD> 40 <TD VALIGN="top" WIDTH="100" >14 <BR></TD> 41 <TD VALIGN="top" WIDTH="100" >15 <BR></TD> 42 <TD VALIGN="top" WIDTH="100" >16 <BR></TD> 43 <TD VALIGN="top" WIDTH="100" >17 <BR></TD> 44 <TD VALIGN="top" WIDTH="100" >18 <BR></TD> 45 </TR> 46 <TR> 47 <TD VALIGN="top" WIDTH="100" >19 <BR></TD> 48 <TD VALIGN="top" WIDTH="100" >20 <BR></TD> 49 <TD VALIGN="top" WIDTH="100" >21 <BR></TD> 50 <TD VALIGN="top" WIDTH="100" >22 <BR></TD> 51 <TD VALIGN="top" WIDTH="100" >23 <BR></TD> 52 <TD VALIGN="top" WIDTH="100" >24 <BR></TD> 53 <TD VALIGN="top" WIDTH="100" >25 <BR></TD> 54 </TR> 55 <TR> 56 <TD VALIGN="top" WIDTH="100" >26 <BR></TD> 57 <TD VALIGN="top" WIDTH="100" >27 <BR></TD> 58 <TD VALIGN="top" WIDTH="100" >28 <BR></TD> 59 <TD VALIGN="top" WIDTH="100" >29 <BR></TD> 60 <TD VALIGN="top" WIDTH="100" >30 <BR></TD> 61 <TD VALIGN="top" WIDTH="100" >31 <BR></TD> 62 <TD VALIGN="top" WIDTH="100" > <BR></TD> 63 </TR> 64 </TABLE> 65 </CENTER> 66 </BODY> 67 </HTML> |
すでにみた cal.pl と同様に月や年が $mon や $year 変数に格納されている状態とします。 cal.pl の11行目の部分(年・月の行と曜日の行の出力)に対応する部分をまず作ります。 上の sample01.html の1行目から18行目までを出力しなければなりません。
次のように記述すればとりあえず出力できます。 注意するのは"で囲まれた文字列の中に " という文字自身をいれるときは、 文字列の終端の"と区別するために前に\をつけて \" としなければならないことです。
print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>$year年$mon月の予定</TITLE>\n"; print "</HEAD>\n"; print "<BODY BGCOLOR=\"#FFFFFF\">\n"; print "[<A HREF=\"perl02.html\">「出力の工夫」に戻る</A>]\n"; print "<CENTER>\n"; print "<H1>$year 年 $mon 月</H1>\n"; print "<TABLE BORDER BGCOLOR=\"#C0C0FF\">\n"; ....... print "<TH WIDTH=\"100\">土</TH>\n"; print "</TR>\n"; |
でもこれでは print や \n をずいぶん何度も書かなければなりません。 実は""で囲む文字列は複数行に渡ることができ、 しかもそのとき改行文字は改行文字として扱われるので、 次のように書きなおすことができます。
print "<HTML> <HEAD> <TITLE>$year年$mon月の予定</TITLE> </HEAD> <BODY BGCOLOR=\"#FFFFFF\"> [<A HREF=\"perl02.html\">「出力の工夫」に戻る</A>] ....... ....... <TH WIDTH=\"100\">土</TH> </TR> "; |
しかしこれでも " の部分を \" としなければならず、不便です。 実はさらに次のようにかくこともできます。 赤い HERE は識別子で、適当に決めます。 通常の文字列の場合と同様に、最初の識別子を囲む引用符号の種類で、 中の変数の変数置換を行なうかどうかが変わります。 引用符号を省略すると " で囲まれたものと見なされます。
print <<"HERE"; <HTML> <HEAD> <TITLE>$year年$mon月の予定</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> [<A HREF="perl02.html">「出力の工夫」に戻る</A>] ....... ....... <TH WIDTH="100">土</TH> </TR> HERE |
それでは、cal.pl を sample01a.pl という名前でコピーして、 11行目から18行目までの行頭に#を記述してコメントにして下さい。 そして上のいずれかをコメントした部分のかわりに挿入します。 これだけですと表が未完成ですので、日付のはいる部分は後回しにして、 ともかく sample01.html の64行目以降の部分も出力するように、 上の部分をまねて記述して下さい。 sample01a.pl をセーブして、月と年を指定して実行してみて下さい。
jperl sample01a.pl 5 2000うまくいけば画面に表示されるはずです。 エラーがおきた場合はそのエラーメッセージをよく読んで修正を加えて下さい。 画面に表示するだけではブラウザで見ることができませんので、
jperl sample01a.pl 5 2000 > tmp.htmlと、tmp.html というファイルにリダイレクトして下さい。 tmp.html というファイルができますので、これをブラウザで見てみましょう。 曜日だけのカレンダーができたでしょうか。
さて、次にカレンダーの本体を出力するように変更します。 もとの cal.pl で言えば13行目から16行目の部分を復活させて、 14行目と15行目の部分に修正を加える必要があります。 sample01.html を見てみると、 単に日付($_変数に格納されている)を出力するかわりに
"<TD VALIGN=\"top\" WIDTH=\"100\" >$_ <BR></TD>\n"という文字列を print すればよさそうです。 ただし日曜日なら<TR> という1行をその前に、 土曜日なら </TR> という1行をその後に print しなければなりません。 さらに、cal.pl では不要でしたが、月の最後の日が土曜でない場合は空欄を余分に 出力する必要があります。 対応には色々方法があるでしょう。