CGI モジュール(1) パラメータを受け取る

CGI プログラムの基本的な作り方がわかってきたので、そろそろ CGI モジュールを勉強したいと思います。CGI モジュールは Perl5 標準の組み込みモジュールで、CGI プログラムを作るのに便利な機能が利用できるようになるモジュールです。(Japanized Perl Re…

範囲演算子

スライスを勉強した時に「範囲構文」として勉強した「a..b」という書き方ですが、ラクダ本を読んでいたところ、これは構文というよりは「..」という「範囲演算子」によるもの、という事がわかりました。 今まで「整数と整数の間の範囲の整数リストを作り出す…

エスケープ処理された文字列を戻す

POST でパラメータを受け取る で作った echo.cgi に改行や日本語を含むテキストを送信してみると、ちゃんと表示されず「%」が含まれた文字列になってしまいますが、これは文字化けではありません。 例えば、名前(name)に「ぱるも」、本文(body)に「こん…

POST でパラメータを受け取る

「QUERY_STRING でパラメータを受け取る」で勉強した、URL の最後に「?」をつけ、その後にパラメータ(QUERY_STRING)を記述する、という方法は HTTP リクエストのメソッドが「GET」の時に使われるものでした。 ですが、ブラウザやサーバーソフトウェアには …

ファイルテスト演算子と優先順位

先日作ったソースコードビューアのコード中で「ファイルテスト演算子」というものを使いました。 ファイルテスト演算子とは、文字通り「“ファイル”を“テスト”する為の“演算子”」です。ファイル演算子を使う事で、「ファイルが存在するか」「ファイルに書き込…

ソースコードビューア CGI を作る

日記内に登場した CGI のソースコードが簡単に見られるように、簡単なソースコードビューア view.cgi を作ってみたいと思います。(^_^) 考えたのは「view.cgi?ソースファイル名」と、QUERY_STRING を使って表示したいソースファイルの名前を渡し、色分けして…

HTML::Template(4) TMPL_IF

HTML::Template のテンプレートタグの勉強です。 今回は、テンプレートの中で条件分岐をする為の <TMPL_IF> タグについて勉強します。 使い方は http://d.hatena.ne.jp/palmo/20060715/htmpl3:TMPL_LOOP とほとんど同じで、NAME 属性で「条件」として使う値を指定しま</tmpl_if>…

%ENV で HTTP リクエストの情報を調べる

特殊変数 %ENV には、スクリプトが動作しているコンピュータの「環境変数」が入っています。環境変数とは、OS の内部の設定などを設定/記録する為の変数で「名前=値」の組が集まっているものです。環境変数を調べる事でシステムの設定や情報を調べる事ができ…

QUERY_STRING でパラメータを受け取る

先ほどのエントリで %ENV を表示する CGI プログラムを作りましたが、この CGI プログラムの URL の末尾に「?abc」と付けて、開いてみてください。 http://palmo.is.land.to/cgi/v/envtable.cgi?abc $ENV{'QUERY_STRING'} の値として「abc」が入っているのが…

HTML::Template(3) TMPL_LOOP

引き続き HTML::Template のテンプレートタグを勉強します。今回は <TMPL_LOOP>。 <TMPL_LOOP> タグは、表示するページの一部分を繰り返したい時に使います。例えば「商品のカタログ」を表示するページを作っている場合、複数の商品の情報(名前や値段など)をそれぞれ表示する為に</tmpl_loop></tmpl_loop>…

CPANモジュールへのパーマリンクを作る Greasemonkey スクリプト

この日記で CPAN モジュールを勉強する時に、search.cpan.org 内のモジュールのページにリンクする事がよくあるのですが、search.cpan.org 内のモジュールページの URL には以下のようにモジュールのバージョンが入っています。 http://search.cpan.org/~kas…

Collatz 予想

キミならどう書く 2.0 - ROUND 2 - が発表されました。前回の問題「100までの整数から素数を列挙せよ」にもPerl で答えたので、今回も Perl で自分なりに挑戦してみます。(^_^) ちょっと長いですが、以下問題の引用です。 Collatz予想の収束までのステップ数…

HTML::Template(2) TMPL_VAR

HTML::Template を使ってみる(1) の続きです。 前回勉強した TMPL_VAR タグをもうちょっと掘り下げます。param メソッドで設定した値と置き換わるのでしたね。NAME 属性で、どの値と置き換わるのかを指定しましたが、他にも属性を利用できます。 ESCAPE 属性…

HTML::Template を使ってみる(1)

昨日の「配列やハッシュを HTML で出力する」に対して id:fbis さんよりコメントを頂きました。以下、引用です。 HTMLを出力するのであればHTML::TemplateなりTemplate-Toolkitなりのテンプレートエンジンを利用した方が良いかと。まずはシンプルなHTML::Tem…

簡単なページを出力してみる

まずは、簡単な HTML によるページを表示する CGI プログラムを作ってみます。 lighttpd を導入した時に、以下のような簡単なテスト用 CGI プログラムを作りました。 #!/usr/local/bin/perl print "Content-Type: text/html\n\n"; print "Hello, world!\n";…

配列やハッシュを HTML で出力する

先ほどのエントリでは HTML 文によりページを表示しましたが、ただ単に HTML 文を print しているだけだったので、これでは HTML ファイルを表示してるのと、なんら変わりません。 そこで、今度は変数を埋め込んでページを表示してみます。スカラーは p 要素…

ぱるも砂場を作りました

CGI の実行結果や、ソースコードなどが簡単に見られるように、新たに「ぱるも砂場」というサイトを立ち上げました。(まだ仮オープンです) Perl や CGI に関するまとまった勉強メモや、各種スクリプト・プログラムのダウンロードなどは、こちらで公開してい…

再開します

ここ一週間、多忙につきお休みしてました。余裕がでてきたので、そろそろ再開したいと思います。 これからどちらへ進むか悩んでいましたが、CGI を勉強しつつ、有名なモジュールの使い方を勉強していく方向に行きたいと思います。その合間に、取りこぼした基…

Windows で lighttpd を使う

CGI をローカルでテストする為の環境を整えたいと思います。 サーバーソフトウェアには lighttpd (別名 lighty)を使ってみます。もちろん Apache でも良かったのですが、お手軽で速いという噂の lighttpd を試してみたいと思っていたので。(^_^) lighttpd …

Shebang 行について

ウェブ上で配布されている Perl で書かれた CGI プログラムを見ると、1行目には必ず #!/usr/local/bin/perlのような行が書かれています。この行は Shebang 行(シーバン行)と呼ばれます。 この Shebang 行は、そもそも UNIX にて「スクリプト」と「プログラ…

ちょっと休憩

ぱるも日記を始めて、気が付くと 50 日を過ぎていました。 最近、家に帰るのが遅くなってしまって、日記を書いていると0時を過ぎてしまう事が多く、「昨日の日記を書いている」状態になってしまいます。良くない良くないと思いつつ、やはり今日も0時過ぎ更新…

eval 関数を評価する

昨日作った簡単な grep コマンドの中で eval と $@ による例外処理を勉強しましたが、eval 関数について詳しく勉強してみます。 僕の知っている Lightweight Language(JavaScript、Python、Ruby、PHP など)のほとんど(全部?)に「eval」関数が存在します…

glob 関数でファイルの列挙

昨日は opendir 関数を使ったファイルの列挙を勉強しましたが、今度は glob 関数を使った方法を勉強します。 Windows を使っていてアプリケーションからファイルを開いたり保存したりする時に出てくる画面(ダイアログ)があります。あの画面に「ファイルの…

簡単な grep コマンドを作ってみる

ファイル名の列挙やファイルの読み書きの仕方を勉強したので、復習のために簡単なプログラムを作ってみます。お題は「grep コマンド」。1つのファイル、もしくはフォルダ中のファイルから、検索パターンにマッチする行を表示します。といっても、オプション…

opendir 関数でファイルの列挙

Perl で実用的なスクリプトを書くときに、「あるフォルダの中に存在するファイルを全て列挙したい」という場合は多いと思います。フォルダの中にあるファイルを全て処理したい場合などがそうですね。 Perl では、こういった事をやりたい場合、実現する方法が…

入出力(6) 改行コードとbinmode

Perl はテキスト処理に長けた言語、という印象がありましたが、バイナリを扱う事も可能です。 ただ、バイナリファイルに関連付けられたファイルハンドルからバイナリを読み込む場合や、ファイルハンドルに対してバイナリを出力する場合、注意しなくてはいけ…

入出力(5) 特殊ファイルハンドル ARGV

昨日勉強した @ARGV はコマンドライン引数のリストを格納していましたが、ARGV ファイルハンドルはまた別のものです。Perl は同じ名前でも型が違えば全く別の変数として扱うのでしたね。 引数として「ファイル名のリスト」を渡された場合、ARGV はそのファイ…

入出力(4) @ARGV 変数で引数処理

プログラムを起動する際に渡す引数を、「コマンドライン引数」「パラメータ」もしくは単に「引数」などと呼びますが、Perl のスクリプトを実行する際にもこの引数を渡す事ができます。 スクリプトを実行する際に渡された引数は、コードの中では特殊変数 @ARG…

特殊ファイルハンドル DATA

Perl コンパイラがコードを解釈する段階で、「__END__」もしくは「__DATA__」という行(トークン)を見つけると、それ以降からファイルの終わりまでコードとして解釈されなくなります。コメントのように、何を書いてもコードとしては実行されませんが、これ…

入出力(3) CSVファイルを表として表示

昨日、ファイルの読み書きの基礎を勉強したので、今度は少し応用的な事をやってみます。具体的には CSV ファイルの読み込みです。 CSV とは「Commma Separated Values」の略で、データを「,」(カンマ)区切りで行列として並べたものです。例えば、次のよう…