name - みる会図書館


検索対象: UNIX MAGAZINE 2004年3月号
27件見つかりました。

1. UNIX MAGAZINE 2004年3月号

連載 / Pe 日活用のヒント 15 16 17 18 19 20 21 22 23 24 25 26 2 7 28 29 30 31 32 33 34 35 if ( $str ~ m に川 ) { " く /tmpl-" substr($str, 1 ) elsif ( $str s ub else { return main { "<tmpl—$str>" " く tmpl—var name=$str>'l while ( く > ) { print ; exit 0 ; main ( ) ; リスト 4 combinepl 1 3 4 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 82 # ! perl ー # $ld: combinepl. pl,v 1 . 1 2004 / 01 / 12 04 : 50 : 40 himazu Exp $ # See . /LICENSE for terms of distribution. # (c) 2004 Morgan Stan1ey Dean Witter and CO . package Combine ; use strict ; use sub sub IO: :Fi1e; Fi1e : : stat ; new { my ($class , %attr) my $self = bless { } , %$self %attr; $self; include { $class ; my ($self , $module, $dstfh) my $ cname my $path = 冖・ if ( $module $path else { $cname $cname $cname $module ; $module ; UNIX MAGAZINE 2004.3

2. UNIX MAGAZINE 2004年3月号

プログラミング・テクニック 73 図 1 引数が fast や force で始まっているかの検査 case "$rc_argl in e S if force*) fast*) # "force prefix; # "fast" prefix; rc—fast=yes rc—arg=${rc-arg#fast} eval ${rcvar}=YES [ ーⅡ "${rcvar}" ] ; then rc_force=yes rc—arg=${rc-arg#force} f i $name iS IIOt set . ) err 3 'run_rc_command: : if [ —z "$name" ] ; then rc-arg=$l 同様 ) 。 だけです ( 誌面の都合上、で折り返しています。以下 すそのような引数かどうかを検査し、そうであれは別の変 工ーションとして処理しなければなりません。そこで、ま force で始まる引数カ甘旨定されていたら、通常の引数のバリ 次は、引数のバリエーションの処理です。 fast または 引数のバリエーション 列カ咄力されるだけで、ほとんど未はありません。 ことは分かっているので、値を出力しようとしても空文字 の前の if 文の条件から name 変数の値カ啌文字列である おり、、 $name" と出力するためのものです。もっとも、そ 字列全体がシングルクオートで括られているので、文字ど これは name 変数の値を出力するわけではありません。文 工ラーメッセージの出力に $ name が含まれていますが、 数を終了します。 されていなければ、その旨を示すメッセージを出力して関 この変数が設疋されていることを確認するわけです。設疋 ような処理をおこなえばよいかが分からないため、最初に 使って示します。 name 変数カ羸疋されていないと、どの かを、引数などではなくた或的な変数である name 変数を rc-command では、どのサービスに対して処理をおこなう 数が正しく設疋されているかどうかを調べています。 run- 続いて、この関数で処理すべきサービスを示す name 変 UNIX MAGAZ 工 NE 2004.3 don't check pid always start 数にその状態を保持しておきます。 このためのコードが図 1 です。引数が格納された rc-arg 変数を case 文に使い、 パターンとして fast* や force* を指定することで、 fast や force で始まる引数が指定されていないかどうかを調べ ています。 fast で始まる文字列が引数に指定されていたら、 rc-fast 変数に、、 yes" を内し、 rc-arg 変数から先頭の fast を取り 除きます。この処理には、シェルの変数展開での # を使っ た文字列の削除を利用しています。 force で始まる文字列が指定されていた場合もほば同様 で、こちらは rc-force 変数に、、 yes" をしています。さ らに、かならす処理が実行されるように、 rcvar 変数に格 納されている名前の変数にも、、 YES " を代入します。この とき、 rcvar が空文字列だと値を設定する変数カ在しな いという状態になってしまうため、 rcvar になんらかの値 が登録されていることを確認してから YES を代入してい ます。 run-rc-command 関数の実行時には、 name 変数を設 定しておくのは当然として、 rcvar 変数と command 変数 も設疋しておくのが普通です。 rcvar には、このサービス を実行すべきかどうかを示す値が格納されている変数 ( 通 常は前回紹介した set-rcvar コマンドの出力 ) が登録され ています。 command 変数は、 name 変数が示すサービス を提供するためのコマンドのパス名をタする変数です。 command 変数と同じ役割を果たす変数に、、サービス 名 -program" があります。この変数が設定されていると きには、その値を command 変数にコピーしなければな りません。この処理をおこなうのが次のプロックです。 eval —overide—command=\$${name}—program 55

3. UNIX MAGAZINE 2004年3月号

連載 / Pe 日活用のヒント リスト 2 変換結果 (attend-tmpl. html) く meta name= く meta name= く head> く html> く meta http—equiv="Content—Language" content="ja"> く meta http—equiv="Content—Type " content="text/html ; charset=euc—Jp"> "ProgId" content="FrontPage . Editor. Document"> "GENERATOR" content="Microsoft FrontPage 6 . 0 " > く title> 出欠登録く /title> く /head> く body> く p > 出欠登録く / p > く table border="O" ce11padding="0" cellspacing= く tr> く td> く p align="right"> 氏名 : く /td> く td> く tmpl_var name=name> く /td> く /tr> く tr> く td valign="top"> く p align="right"> 部署 : く /td> く td> く tmpl—var name=dept> く /td> く /tr> く tr> く td> く p align="right"> 部課コード : く /td> く td> く tmpl—var name=cc> く /td> く /tr> く tr> く td valign="top"> く p align="right"> 状態 : く /td> く td> く tmpl_var name=status> く /td> く / t て > く /table> " 0 " borde て C010 て = " # 111111 " id="AutoNumber1"> <p> く a href=" く tmpl—var name=cgipath>?attend=w"> 同イ半者と出席く /a>&nbsp; く a href=" く tmpl—var name=cgipath>?attend=o"> 同伴者なしで出席く / a > & Ⅱ bsp ; く a href=" く tmpl—var name=cgipath>?attend=n"> 欠席く /a>&nbsp; ( 変更可能 . ) く /p> く /body> く /html> こうした言の前後に Web プ HTML 工デイタでは、 ラウザに表示されるような文字を入力できない。この場合 は、前後に HTML のコメントとして tmpl 」 00P の開始 と終了の部分を挿入するのがよいだろう。具体的には以下 tmpl—loop name=table のようになる。 /tmpl—loop く /tr> く td > ・・ ・・く / td > く td > ・・ ・・く / td > く t て > UNIX MAGAZINE 2004.3 htm12tmpI の言月 htm12tmpl は短いので説明するまでもないかもしれな いが、いちおう説明しておこう。 main() では入力ファイルから { { ・ ・・・ } } を探し、み つかったらその中身を convert() に渡して、戻り値で ・・・ } } を置き換えている。以下のように、 s コマン ドに e オプションが付いているので、置換結果である convert($l)" が Perl の実行文として実行される。 77

4. UNIX MAGAZINE 2004年3月号

連載 // 」 avaServer Pages 図 9 Tiles でレイアウトした言族びのページ 、ファイル ( E ) 編集 ( 印表示 OØ 言里近 V ー Netscape ジャンプ 0 ブッりマーり⑧ツール (I) ウインドウヘルプ凹 回図 「、 h 鱸 / t 。 n t: 部 / 田を岱ホーム ( 索 0 新叩・い、うブッりマーり 検索 H3ME 灰色の味付けか実を解き明かカ 怪な館に秘めらカた幽第の。 0 、 単語を入力して「作るリボタンをクリックしてください。 HOME Powered by Struts 図 10 Tiles の定義ファイル tiles-defs. xml く ?xml version="l . 0 " encoding="EUC—JPt' ? > く !DOCTYPE tiles—definitions PUBLIC ヘッダタイル 本文タイル フッタタイル —//Apache Software Foundation//DTD Ti1es Configuration//EN" "http://jakarta.apache.org/struts/dtds/tiles¯config.dtd"> く tiles—definitions> Definitions for Ti1es documentation く def inition name=" site . mainLayout " path="/1ayouts/wordgameLayout . j > value="/tiles/body. jsp" / > く put name="footer" value="/tiles/common/footer ・ jsp" / > く put name="header ー value="/tiles/common/header. jsp" / > value = " 言葉遊び " / > く /definition> く put name="bodyl く put name="title't く put name="footer" value="/tiles/common/nohomefooter ・ jsp" / > く put name="title' value = " 言葉遊びへようこそ ! " / > く definition name="site . index. page'l extends="site . mainLayout"> く /definition> く /tiles—definitions> ファイルの一先豆頁の、 はエンコーディングの指定で、ファイル内に日本語を含め く ?xml version="l . 0 " enc0ding="EUC—JP" ? > UNIX MAGAZINE 2004.3 は、ファイルの形式 ( ドキュメント・タイプ ) を表してい く !DOCTYPE ・ るときに必要です。そして、 く tiles—definitions> く /tiles—definitions> で、 wordgame アプリケー アウトを定義しています。 ます。 続く、 ションカ駛うスクリーンのレイ 91

5. UNIX MAGAZINE 2004年3月号

連載 / Pe 日活用のヒント HTML::Template のマークアップには、 <tmpl-var 〉 のほかにも、指定した部分を繰り返し展開する (tmpl- I 。叩〉や、条件に応じて展開をおこなうく tmpläf 〉なども ある。 (tmpl-loop 〉を使えば、テンプレートによる表の出 力も可能である。 試してみると分かるが、テンプレートの使用は、ページ デザインとプログラミングを分業する場合はもちろん、分 業しない場合にも便利である。 テンプレート作成の問点 テンプレートの作成と編集にはテキストエデイタカ駛え るカゞ、 Macromedia Dreamweaver や Microsoft Front- page 、 Adobe GoLive といった HTML 工デイタを使 いたいことも多いだろう。 Web ページデザイナーにテン プレートの作成を依頼する場合はそうだろうし、私自身も ふだん使っている FrontPage でテンプレートを作成した いと思った。 HTML 工デイタが HTML::TempIate の マークアップを理解してくれれは話は簡単なのだが、そう ではない場合がほとんどである。そのため、テンプレート のマークアップの入力に苦労することになる。 HTML::Template では、 HTML のコメントのなかに テンプレートのマークアップを言当杢することができる。た とえば、 tmpl—var name=last—name は、以下のマークアップと同じ働きをする。 く tmpl—var name=last—name> コメントのかたちであれば、 HTML 工デイタの HTML タグの処理に逆らうことなくテンプレートのマークアップ を挿入できるが、面倒だし万能ではない。ハイバーリンク のリンク先、つまり a タグの href 属性を置換えの対象と したい場合は以下のようになる。 tmpl—var name=link ーー > " >link く /a> く a href='l くーー これは正常な HTML マークアップにはみえにくいの で、 HTML 工デイタによっては入力すらできないかもし れないし、たとえ入力できてもちょっとした操作カ源因で 変更されてしまうかもしれない。たとえば、 FrontPage 2003 の WYSIWYG 状態 ( デザインビュー ) でこのよ うなリンクの内容 ( く ! ー tmpl-var name=link ー〉 ) を開 くと、、〉 " がなくなり、空白 き、変更せすに保存すると、 UNIX MAGAZINE 2004.3 図 1 社内行事への出欠泉をする Web ページ 出欠登録ー Microsoft lnternet Explorer 言同図 方イル ( E ) 編集 : 表示お気に入り ( 合 ) ツルーへ”、第 出欠登録 氏名・ {{na me}} 部署 {{dept}} 部課コード {{cc}} 状態 {{status}} 同伴者と出席同伴者なしで出席囚匿 ( 変更可能 ) は % 20 に置き換えられてしまう。 本来とは異なるかたちでのマークアップの入力 そこで、テンプレートのマークアップを HTML 工ディ タが普通のテキストと解釈するようなかたちで入力し、そ れを HTML::Template のテンプレートに変換したらど 、、 { { " と、、 } } " を使って うかと考えた。具体的にいうと、 テンプレートのタグを表現するのである。たとえば、 く tmpl—var name=last—name> の代わりに、 {{var name=last-name}} にしておき、変換プログラムを使って本来の形式に変換す るのである。 テンプレートのタグはすべて tmpl- で始まるので、 { { } } のなかにはこれを除いたタグ名を入力することにした。ま た、テンプレートのタグには tmpl-var がとくに頻繁に使 われるので、これについてはタグ名を省略して以下のよう に書けることにした。 {{last-name}} 社内行事への出欠を登録する図 1 のような Web ページ を例に説明しよう。 リスト 1 に、この HTML ファイルを示す。これは 原始テンプレートとでもいうべきもので、テンプレートを 生成するために使用する。そして、原始テンプレートをテ ンプレートに変換するのが末尾のリスト 3 に示す html 2tmpl である。リスト 1 のファイルの名前が attend- tmpl-proto. html だとすると、以下のコマンド行でテン プレートに変換できる。 htm12tmp1 attend—tmpl-proto. tml > \ attend—tmpl . html 75

6. UNIX MAGAZINE 2004年3月号

連載 / 」 avaServer Pages く tiles:getAsString 〉タク が、それぞれへッダタイル、本文タイル、フッタタイルに く title 〉タグの本体部分では、く tiIes:getAsString 〉タグ く /definition> く put name="title" value = " 言葉遊び " / > path="/1ayouts/wordgameLayout . j sp" > く definition name=" site. mainLayout " , ・ title プロバティの値は、 tiles-defs. xml ( 図 10 ) の、 ページのタイトルの部分に表示します。 は、、、 title" プロバティの値を文字列として取り出し、 Web く tiles :getAsString name="title"/> を使ってタイトル文字列を表示します。そして、 つのタイルを組み合わせています。 3 行 1 列の表の各セル wordgameLayout. jsp では、 <table 〉タグを使って 3 すいでしよう。 く jsp:include 〉タグと同様の働きをするといえば分かりや く tiles:insert 〉は、その場にタイルを挿入するタグです。 タイルのレイアウト イルのファイルに埋め込むことができます。 イアウト・ファイルに埋め込んだり、 header. jsp などのタ String 〉タグを使って wordgameLayout. jsp のようなレ 意の文字列を、く put 〉 ( (tiles:put 〉 ) タグとく tiIes:getAs- タイトル文哢冽にかぎらず、 Web ページに表示したい任 各ページごとに独自の値を設定することもできます。 で設定した、、言葉遊び " になりますが、く put 〉タグを使って 対応します。 ・ <tiles:insert attribute= ・く tiles:insert attribute ・く tiles:insert attribute=" header" / 〉 に言古されている、 ” footer ” UNIX MAGAZINE 2004.3 footer ・ jsp" / > く put name="footer" value="/tiles/common/=:> header ・ jsp" / > く put name="header" value="/tiles/common/=:> path= " /1ayouts/wordgameLayout ・ j sp" > く definition name="site . mainLayout" ・ たプロバティの値です。 tiles-defs. xml ( 図 10 ) の、 タイルとして挿入する内容は、 attribute 属性で指定し く put name="body" く /definition> で設疋した、 value= "/tiles/body. jsp" / > ・ tiles/common/header. jsp ・ tiles/body. jsp ・ tiles/common/footer. jsp う内容になるので、各 JSP ページや Struts のアクション 通常、本文タイルにあたる body.jsp はページごとに違 定することもできます。 カ俐用されますが、各ページごとにく put 〉タグを使って指 のなかで、 く tiles :put name="body" , value="/tiles/play. jsp" / > のように言当して、本文のタイルの部分に の内容を表示させます。 ☆ body. jsp 以タト これで、 wordgame アプリケーションを Tiles フレー ムワークに対応させる準備カ墜いました。あとは、個別の ・ページごとに異なる本文タイル 各ページ共通のヘッダタイルとフッタタイル タイルをどんどん作っていくだけです。次回は、 を作成します。 ( あらい・みちこ ASTEC) 95

7. UNIX MAGAZINE 2004年3月号

連載 / 」 avaServer pages 図 11 site. mainLayout の構成 title ( タイトル文字列 ) 言篳近ひ Netscape 37 site. mainLayout (wordgameLayout. jsp) 同図 ノ門ル偏集仮 ) 表示ジャンプ 0 ブックマゆ ( 印ツールウインドウヘルプ旧 ) 新岱ホーム検索 0A0 いカりマ /tiles/bodyjsp /tiles/common 、 headerJsp /tiles/common/footerjsp header bOdy footer 雪完了 <definition タグ 1 番目の (definition 〉タグをみてみましよう。このタグ の 2 種類のスクリーン・レイアウトを定義しています。 ・ site. index. page : index ページ用のレイアウト ・ site. mainLayout : ー殳的なページ用のレイアウト 図 10 では、 は、個別のスクリーンのレイアウトを定義するタグです。 く /definition> く definition <tiles-definitions 〉タグのなかにある、 ・ path ・ name は、次の 2 種類の属性をもっています。 92 path=" /1ayouts/wordgameLayout ・ j sp" > く definition name="site . mainLayout" ・ ( 表現 ) したファイルを指定します。 path 属性では、スクリーンのレイアウトを実際に定義 アウトを指定するときは、こで付けた名前を用います。 ます。個々の Web ページが表示に使うスクリーン・レイ name 属性では、スクリーン・レイアウトに名前を付け は、 site. mainLayout のレイアウトとして、 アプリケーションのディレクトリの下の、 ・ layouts/wordgameLayout. jsp を使うことを未します。 wordgame く put 〉タグは、プロバティを追加したりプロバティに値 を設定するタグです。く definition 〉タグの本体部分の、 value= く put name— UN 工 X MAGAZ 工 NE 2004.3 は、 く put name="title" value = " 言葉遊び " / > たとえば、 をもっプロバティを追加します。 ・ value 属性で指定した値 ・ name 属性で指定した名前 は、スクリーン・レイアウトに したプロバティを、それそれ次の用途に利用します。 site. mainLayout のレイアウトでは、く put 〉タグで指定 トに追加します。 のプロバティを、 site. mainLayout スクリーン・レイアウ 値が、、言葉遊び " 名前が、、 title'

8. UNIX MAGAZINE 2004年3月号

プログラミング・テクニック 図 2 プロセスのが犬態を調べる変数窈直の言綻 if [ -z "$rc-fast" —a —n "$-procname" ] ; then if [ ーⅡ f i if [ ーⅡ else f i "$pidfile" ] ; then —pidcmd='rc-pid=$(check '$—pidcmd" ] ; then —keywords=" ${—keywords} =\$${name}-chroot \ status P011 " _process $—procname $command—interpreter" ) ) ) —pidcmd='rc-pid=$(check—pidfile ' "$pidfile $—procname $command—interpreter" ) ) ) 図 3 一日勺な変数への代入 eval —chdir=\$${name}-chdir -nice=\$${name}-nice -group=\$${name}-group if [ —z "$rc-arg" ] ; then rc—usage " $—keywords " fi chroot -groups=\$${name}-groups -user=\$${name}-user \ 次は、実際にコマンドを起動する際に指定する引数を設 定します。ここで設定するのは rc-flags 変数ですが、基本 的には、、サービス名重 ags " 変数の値をコピーします。た だし、環境変数の flags カ第ス疋されている場合には、そち らの値が優先されます。 if [ -n "$flags" ] ; then rc—flags=$flags else # a110W override , from envlronment eval rc—flags=\$${name}—flags 実際には flags というシェル変数を参照しているだけで すから、環境変数でなければならないわけではありません。 しかし、コメントを読むと、環境変数で上書きできるとい う、、気持ち " を表しているようです。それなら、環境変数 らしく大文字の変数名にしてもよかったのではないかと思 いますが、なぜかここでは小文字のままです。 次は、サービス用の各種変数をサービス名を使わなくて も取得できるように、一時的な変数に代入しなおしていま す ( 図 3 ) 。 図では 3 行に分かれていますが、行の継続を示す \ が 行末に付いているため、 1 行のコマンド行として解釈され ます。 eval コマンドは、指定されたすべての引数を空白で 区切って並べなおし、その結果がコマンド行として指定さ れたとみなして再度コマンド行の解釈をします。今回の場 合には、変数に対する値の代入が 6 つ並んだコマンド行と 解釈されるはずです。 f i UNIX MAGAZINE 2004.3 変数への代入がそんなにいくつも並んで大丈夫だろうか と思うかもしれませんが、心配にはおよびません。このコ マンド行は、シェルでは何もコマンドが置かれていないも のと解釈されるからです。シェルが普通のコマンドを解釈 する場合、コマンド行の頁に、、名前 = 値 " という形式の記 述が並ぶあいだは、それを変数への代入とみなして処理し ます。この処理が終ったあとにコマンド行に文字列カっ ていれば、それをコマンドとして実行します。このとき、 さきほどの変数への代入は、このコマンド実行のためだけ の変数として処理します。コマンド行カ啌になった場合に は、あるコマンドのための変数ではなく、シェル自身の変 数の値を変更します。したがって、 1 行にシェル変数への 代入をいくつ並べてもかまわないわけです。 図 3 で設定した変数のうち -user 変数は、そのユーザー の権限でコマンドを実行します。これは、現在シェルを実 行しているユーザーと同じであれば、あらためてユーザー の設定をおこなう必要はありません。そこで、この変数の 値と現在のユーザーを比較し、等しければ unset コマンド を使って -user 変数を無効にしています。 user ー ] ; then unset $—user : # , ・ if running as - that user if unset _user f i かもしれません。これは、、 'id ー un ' " とまったく同じ意味 こで使われている、、 $()d -un)" という形式は初めて 57 になります。つまり、 id ー un " というコマンドを実行し、

9. UNIX MAGAZINE 2004年3月号

$—chroot $command $rc_flags $command_args" 動し、 nice コマンドを実行しつつ command 変数の中身 を実行するようなコマンド行を作成すればよいのです。 else -doit="\ ${-chdir: + cd $-chdir; } \ ${-nice : + nice ーⅡ $-nice } \ $command $rc—flags $command—args" ただしこのとき、 -user 変数に値カっていれば、 su コ マンドを使ってそのユーザーの権限でコマンドを実行しな ければなりません。そのため、 -doit 変数の先頭に 、 su コマ ンドに関する言杢を加えます。 if [ ーⅡ "$_user" ] ; then doit="su —m $_user f i f i 図 4 コマンド行を -doit 変数に格納 echo if [ ${-nice : + nice -n $-nice } \ chroot ${-user: + -u $-user } $ { ー c ー C —group : + —g $-group }${—groups : + -G $-groups } \ —doit="\ ーⅡ " $ chroot" ] ; then "Starting ${name} . ' sh こまでくれば -doit 変数に実行すべきコマンド列が格 納されているはずなので、これを実行します。この場合 もさきほどと同様、コマンドの戻り値をみながら run-rc- command 関数自身の戻り値を決めています。 debug "run—rc—command : —dOit : $—doit ー if ! eval $—doit & & [ —z "$rc—force" ] ; return 1 then コマンド本体の実行後、 -postcmd 変数の内容を実行す れば start が指定されたときの処理は終了です。 stop が引数として指定された場合は、まずプロセスカ働 作していることを確認します。 stop) if [ —z "$rc—pid" ] ; then if [ ーⅡ "$pidfile" ] ; then 60 exit 1 f i else running? " echO "${name} not (check $pidfile) . ” ${name} not running? echO \ プロセスカ働作していなければ、その旨を出力して関数 を終了します。 プロセスカ働作している場合には、ま $-precmd を実 行してから本来の処理をおこないます。具体的には、停止 するサービスの出力をしたあと、 kill コマンドを使って目 的のプロセスに TERM シグナル (sig-stop 変数に値カ 定されていればそのシグナル ) を送ります。この場合にも、 su コマンドを使ってユーザーの権限を操作したり、コマン ドの戻り値を正しく返すといった処理があります。 —for—pids $rc—pid return 1 eval $-doit & & [ —z "$rc—force" ] ; then doit="su —m $—user —c 'sh —c , ・ if [ ーⅡ "$-user" ] ; then ー " k 土 11 -${sig-stop: -TERM} $rc—pid" "Stopping ${name} . wait f i if ! f i doit¯ echO UNIX MAGAZ 工 NE 2004.3 restart) forcestart を実行するように調整しています。 んに stop や start を実行するのではなく、 forcestop や 数の値にも注目し、この変数に値が設定されていたら、た しをおこないます。実際に呼び出すときには rc-force 変 restart が指定された場合、 stop と start を付けた呼出 ときは sig-reload 変数の値カ駛われます。 には、デフォルトでは HUP シグナルが、変数で指定する マンドの実行時に用いるシグナルだけです。 reload の場合 されたときとほとんど変わりません。異なるのは、 kill コ 引数に reload が指定された場合の処理は、 stop が指定 されたときの処理は完了です。 す。さらに -postcmd の内容を実行すれば、 stop が指定 を使って目的のプロセスが正常に終了したことを確認しま これらの処理が終ると前回紹介した wait-for-pid 関数

10. UNIX MAGAZINE 2004年3月号

</body> く /html> 変換結果をリスト 2 に示す。 76 よい。 dows 上の ActivePerl を使っている場合はそのままで めには、リストの 1 行目を適宜変更する必要がある。 Win- htm12tmpI を UNIX や Cygwin 上の Perl で使うた {{/loop}} とができる。 タグは、原始テンプレート内では以下のように言杢するこ tmpl-if や tmpl 」 oop などには終了タグがある。終了 連載 / Pe 日活用のヒント 繰り返すことになる。 く meta http—equiv="Content—Language" content="ja"> く meta http—equiv="Content—Type " content="text/html ; charset=euc—jp"> く meta name="ProgId" content="FrontPage . Editor. Document"> く meta name="GENERATOR" content="Microsoft FrontPage 6 . 0 " > く head> く html> リスト 1 原始テンプレート (attend-tmpl-proto. html) く title> 出欠登録く /title> く /he ad> く body> く p > 出欠登録く / p > く table border="O" ce11padding="O" く tr> く td> く p align="right"> 氏名 : く /td> く td>{{name}} く /td> く /tr> く tr> く td valign="top"> く p align="right"> 部署 : く /td> ce11spacing="0'l bO て dercolor = " # 111111 " id='lAut0Number1"> く td>{{dept}} く /td> く /tr> く tr> く td> く p align="right"> 部課コード : く /td> く td>{{cc}} く /td> く /tr> く tr> く td valign="top't> く a href="{{cgipath}}?attend=n"> 欠席く /a>&nbsp; ( 変更可能 . ) く /p> く a href="{{cgipath}}?attend=o"> 同伴者なしで出席く /a>&nbsp; く p> く a href="{{cgipath}}?attend=w"> 同伴者と出席く /a>&nbsp; く /table> く /tr> く td>{{status}} く /td> く p align="right"> 状態 : く /td> tmpl-loop はコメントに htm12tmpI を使えば、比較的素直にテンプレートのマー クアップを入力できる。しかし、ループのマークアップは コメントに入れなければならない場合が多い。たとえは表 を出力するときは、表の行数ぶんだけ以下のような言当を く tr> く td > ・・ く td > ・・ く /tr> ・・く / td > ・・く / td > UNIX MAGAZINE 2004.3