- Perl ›
- 書籍案内
【書籍案内】かんたんプログラミングCGI/Perl 木本裕紀著
技術評論社から「かんたんプログラミング」シリーズとして発売されている書籍のCGI/Perl版です。
[asin:4774139289:detail]
この書籍は現時点で、現代的なPerlで記述されている唯一のCGIの本だと思われます。CGIについて書いた、Perlの書籍というのは、Perl4が流行していた時代のあまり推奨されない記述がたくさん含まれている本がほとんどです。
モダンPerlを意識して書かれているCGIの本はまずないと思われます。
CGIの解説については、プロトコルの細部についてではなくて、CGIプロトコルを使ってWebアプリケーションを開発するときに、内部でどのようなことが行われるかということをイメージしやすいような解説になっています。
「ブラウザ -> HTTPリクエスト発行 -> Webサーバー -> CGIスクリプト -> HTTPレスポンス生成-> Webサーバー -> ブラウザ」という流れが理解できる解説になっています。
CGI自体は、処理速度が出ないという理由のために、主流ではなくなってしまいましたが、Webアプリケーションがどのように動いているかを理解する助けとしては、有用だと思います。
またさくらのレンタルサーバーでCGIを配置して実際に実行する部分を詳しく解説しています。FFFTPとかの解説も丁寧にしていて、実際にCGIをサーバー上に配置するときに、できるだけつまづかないように考慮が払われています。
この書籍には章を丸まるとって、純粋な「Perl入門」が含まれています。この章はCGIスクリプトとは、関係がないので、モダンPerlの入門書として読んでいただけるかと思います。業務に役だつPerlの第二章ではPerlの基礎を解説していますが、これを丁寧に解説してあると考えていただけるとイメージしやすいのではないかと思います。
また本書の中で利用しているサンプルコードをWebからダウンロードして試すこともできます。
初めての著作なので、いたらないところが、けっこうあり誤字もたくさんあります。
Webフレームワークにチャレンジ
CGIスクリプトでWebアプリケーションを書くという手法は、現在では古いものになっています。Webフレームワークを使ってWebアプリケーションにもチャレンジしてみましょう。
簡単プログラミングCGI/Perlに掲載されたWebアプリケーションのサンプルを、Mojoliciousというフレームワークで書き直してみました。
- ひとことメッセージ掲示板(Mojolicious::Liteバージョン)
- 画像掲示板(Mojolicious::Liteバージョン)
- 簡易検索アプリケーション(Mojolicious::Liteバージョン)
かんたんプログラミング CGI/Perl 正誤表
「かんたんプログラミング CGI/Perl」の正誤表を作成しました。自分で発見したものと教えてもらったものについて記載してあります。かなりの間違いを含んでいます。サンプルコードについてはほとんどは動くと思います。
ページ | 場所 | 誤 | 正 |
P18 | 下段 | Accept-Charsetの解説でUTF-8がutf-8になってます | UTF-8が正しいです |
P24 | 中段 | 「POSTメソッドで送信されたメッセージボディのデータが~」が重複して記入されています | 重複を取り除く |
P31 | 上段 | デフォルトでは「I Accept …」にチェックが入っています。 | デフォルトでは「I Accespt …」にチェックが入っていません |
P34 | 上段 | Webアプリケーションは「HTML」「HTTP」「CGI」「Perl」の4つの要素で構成されており、それぞれの知識が必要不可欠です。 | Webアプリケーションは複数の技術で構成されており、「HTML」「HTTP」「CGI」「Perl」について学習する必要があります。 |
P34 | 中段 | HTTPをCGIスクリプトのように書くことはありませんが、記述されている情報をスクリプト内で利用することができます。 | HTTPリクエストのヘッダ情報はCGIスクリプト内で利用することができます。 |
P34 | 下段 | WebサーバからCGIスクリプトへデータを渡す方法を「標準入力」、CGIスクリプトからWebサーバへデータを渡す方法を「標準出力」といいます。 | WebサーバからCGIスクリプトへデータを渡すには「標準入力」を利用し、CGIスクリプトからWebサーバへデータを渡すには「標準出力」を利用します。 |
P59 | 中段 | 「8.Perlの実行パスの記述が間違っている」の位置が異なる | P056の「7.CGIスクリプトのパーミッション」の直後の位置が正しいです |
P62 | 上段 | 画面に表示するする | 画面に表示する |
P64 | 中段 | Unixの拡張したOSやLinux系のOSを含みます | Unixを拡張したOSやLinux系のOSを含みます |
P74 | 上段 | 不等号とは異なり「=」に「等しい」という意味はありません。 | 数学の等号記号とは異なり「=」に「等しい」という意味はありません。 |
P75 | 上段 | 意味がわかる名前にましょう。 | 意味がわかる名前にしましょう。 |
P79 | 下段 | l<という変な記号があります | 削除しわすれています |
P83 | 中段 | 「配列の要素に添え字を使ってアクセスすることができます。~」の位置が間違っています。 | 中見出しの「配列の要素」の直後が正しいです。 |
P84 | 中段 | このように配列変数をスカラ変数に代入することを、スカラコンテキストといいます | 解説が間違っているので、この文は削除するのが正しいです。 |
P86 | 中段 | 中見出し「配列に配列を追加する」 | 「配列に複数の要素を追加する」が正しいです |
P86 | 中段 | ひとつの要素だけでなく、配列の追加にも対応しています | ひとつの要素だけでなく、複数の要素の追加にも対応しています |
P87 | 中段 | ソースコード @nums = reverse sort {$b <=> $a} @nums | reverseはいらないです。@nums = sort {$b <=> $a} @nums が正しいです。 |
P88 | 中段 | ソースコード ($name, $age) = ('Ken', 'Taro') | ($name, $age) = ('Ken', 18) が正しいです |
P85 | 上段 | ソースコードのif分に閉じブレースがない | 閉じブレースを追加 |
P86 | 下段 | 配列の要素の1番目から2つの要素を取り出す例です。 | 配列の要素の2番目(添え字で1)から2つの要素を取り出す例です。 |
P87 | 上段 | 配列の要素の1番目の位置から2つの要素を置換する例です。 | 配列の要素の2番目(添え字で1)から2つの要素を置換する例です。 |
P89 | 下段 | ソースコードの最後に「print $animal_join;」が抜けています | print $animal_join;を追加 |
P089 | 下段 | joinの解説を行っていないのにjoinを使用しています。 | 3章5節 「数値演算と文字列操作」で解説されています。 |
P89 | 中段 | ソースコード 18行目 my $last_animals = pos; | my $last_animals = pop @animals が正しいです |
P102 | 上段 | その位置が何文字目から始まっているのかを返却します | 戻り値としてその位置を返却します |
P091 | 下段 | 国際標準後 | 国際標準語 |
P105 | 下段 | >ll というゴミが残っています。 | 取り除くのが正しいです。 |
P108 | 上から14行目 | 論理和(何々 かつ 何々) | 論理和(何々 または 何々) |
P110 | 下段 | スクリプトの実行方法抜けています | 引数を指定してスクリプトを実行してみましょう。perl sample_3_6 1 2 を追加するのが正しいです |
P111 | 上から7行目 | 1番目の要素に「0」が | 1番目の要素に「1」が |
P111 | 下から3行目 | $num[0] $num[1] | $nums[0] $nums[1] |
P114 | 下段 | 「$animal」が「cat」の場合には | 「$animal」が「dog」の場合には |
P123 | 上段 | samplw_3_8.pl | sample_3_8.pl |
P145 | 上段 | close $fh | close $fh; |
P148 | 上段 | 少し進んだ話題ですが、ぜひ知っておいたほうがよい | 少し進んだ話題ですが、ぜひ知っておいたほうがよいことがあります。 |
P157 | 中段 | windwos perl nmake | windows perl nmake |
P158 | 中段 | 完結な内容にしましょう | 簡潔な内容にしましょう |
P158 | 上段 | PerlスクリプトはWebブラウザからではなく、コマンドプロンプトかシェルからスクリプトの存在するディレクトリを指定し、Perlコマンドから実行します | Perlスクリプトはコマンドプロンプトやシェルなどからperlコマンドを使って実行します |
P158 | 上段 | 変数とは値を納めることができる仕組みのことです。プログラムが終了するまで値を維持でき、繰り返し利用することができます。 | 「変数には値を代入することができます。」に修正するのが正しいです。変数はプログラムが終了するまで値を維持しているわけではないので。 |
P162 | 中段 | titleタグの閉じタグのスラッシュ(/)がないです。 | スラッシュがあるのが正しいです。 |
P164 | 中段 | titleタグの閉じタグのスラッシュ(/)がないです。 | スラッシュがあるのが正しいです。 |
P165 | 中段 | titleタグの閉じタグのスラッシュ(/)がないです。 | スラッシュがあるのが正しいです。 |
P167 | 中段 | titleタグの閉じタグのスラッシュ(/)がないです。 | スラッシュがあるのが正しいです。 |
P170 | 中段 | titleタグの閉じタグのスラッシュ(/)がないです。 | スラッシュがあるのが正しいです。 |
P173 | 中段 | フォームのactionのURLの指定が間違っています。 | /cgi-bin/simple-form.cgiが正しいです。 |
P174 | 上段 | /var/www/htm | /var/www/html |
P176 | 下段 | 受け取った文字列を出力されました。 | 受け取った文字列が出力されました。 |
P207 | 上段 | ソースコード名がない | image-bbs.cgi |
P232 | 上段 | 「出力するデータは必ず~」の見出しが中見出し | 小見出しになっているのが正しいです |
P234 | 上段 | 実行したプログラムの役割を果たすモジュールがないかを~ | 実行したいプログラムの役割を果たすモジュールがないかを~ |
P235 | 下段 | ソースコード ? の部分にtaraを埋め込む | 「? の部分にtaroを埋め込む」が正しいです。 |