#!/usr/local/bin/perl asp <% $title = 'Apache::ASP 工作室'; use CGI qw/:all/; %> <% my @index = ( 'パターンマッチによる検索', 'CSV ファイルの、DBI 操作', 'XML における文字コード', 'Apache::ASP Tips', '...'); print div({-align=>'right'},'このページは、一部に' , b(a({-href=>'../../cgi.html'},'CGI.pm')) , ' を使っています。'), '以下、日本語での実例の、作成過程を順次掲載予定です。', ul (li [a({-href=>'#Patternmatch'},$index[0]), a({-href=>'#DBI'},$index[1]), a({-href=>'#XML'},$index[2]), a({-href=>'#Tips'},$index[3]), $index[4]]), hr({-width=>'80%'}); %>
<%=$index[0]%>*[2002-05-01]→[2002-05-03追記]オリジナルサイトは、検索可能で、ディストリビューションにある、 ./apps/search 以下のスクリプトが、そのプログラムと思うのですが、 先に、DB ファイルを作成しなければならないのか、エラーになります。 ファイル数から考えて、全文検索も大げさなので、 パターンマッチのみの、 簡単な検索システムを作ってみました。 大雑把に言うと、 $ grep '何とか' *.htmlのような、コマンド grep に似たサーチです。 Perl/CGI逆引き大全555の極意という ちょっと、大げさな題名の本から、それに見合ったスクリプトを ASP 用に変更します。 多重ループをまわし、ディレクトリ毎に、また、各ファイルに、grep をかけるという考え方です。 あらかじめ、配列として、@SearchDir と、@FileType (検索対象のファイルタイプ)に、セットしておきます。 foreach $directory (@SearchDir) { opendir(S,"$directory"); @searchFile = grep(!/^\./,readdir(S)); close(S); foreach $filename (@searchFile) { foreach $type (@FileType) { if $filename =~ $type { (ファイルごとに内容を検索) ... } } }という骨格です。 このスクリプトを、search.asp として、./docs-jp/apps-jp/mysearch に置くことにします。 まず、手始めに、同じディレクトリに、.htaccess は、ASP スクリプトとして、 動作するように、次のように設定します。 UseStrict 1 だと、グローバル変数の定義でエラーが続出するので(^^ゞ 今後の研究課題ということで、コメントアウトしました。 次に、global.asa に、 sub getFormData{ my($buffer,@pairs,%FORM,$name,$value); if ($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); else { $buffer = $ENV{'QUERY_STRING'}; } pairs = split(/&/,$buffer); foreach (@pairs) { ($name, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%(\w\w)/pack("C", hex($1))/eg; $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/\r\n/\n/g; $value =~ s/\r//g; $FORM{$name} = $value; } return(%FORM); } # Jcode.pm を使って、 # どんなコードでも、EUC-JP に変換 sub toeuc { my($text) = @_; my($code,$nmatch) = getcode( \$text ); return ( jcode($text,$code)->euc ); }と、関数を2つほど付け加えます。 前者は、Apache::ASP か、cgi.pm の実装を使えばと思いますが、ちょっと調べきれていません。 これまた、Perl/CGI逆引き大全555の極意の改変です。 <% my $searchScript = "../../docs-jp/apps-jp/mysearch/search.asp" ; %> その結果出来上がったのが、search.asp のソースです。 また実際に ASP という検索語を使い、検索を実行させます。 一部の特定の文字の検索のさい、文字化けします(^^ゞ EUC-JP のページは少なくとも、表示は正常のようです。 ループが、多重になっている割には、スピードも遅くなく、 リアルタイムの検索ができるので十分実用的と思っています。 $tag_regex_ = ...の部分です。 サブルーチンは、同ページのタグを削除するを利用しています。これで、生のスクリプトは出てきますが、ソース公開してるんだから、ま、これでいいっか。 |
<%=$index[1]%>*[2002/05/08]実は、ディストリビューション内に、CSV(コンマ区切りファイル)のサンプルがあります。ネット上で、各自のブックマークを実現させる簡単な実例です。この実例もタイトルなど日本語化して掲載しました。→ブックマーク実例です。使い方は難しくないと思います。自由に利用していただいて結構です。 トラブルがあるようなら断りなしに撤去します。 でもなぜか、Mozilla 0.9.8 あたりだとうまくいかない。 IE、Opera あたりは OKのようです。 これらのスクリプトのソースです。 index.asp および、 bookmarks.asp このように、DBD::CSV モジュールを使って、 CSV ファイルへの問い合わせを実現しています。 そこで、日本語実例として、 CSV 保存したこのマニュアル文書翻訳での訳語集への アクセススクリプトを作成します。出来あがったのが、 訳語対照表です。 データベース検索システムの基本は、選択表示、追加、修正、削除の4つと思います。 あとの3つは、その検索の利用ポリシーによるものですが、 順に、DBI および DBD::CSVの骨格を示します。
|
<%=$index[2]%>*[2002/05/15]XML/XLST はそれ自体の複雑さに加え、日本語を扱う上で、文字コードの多様さに辟易します。また、一般的には、XML アプリケーションサーバもおおがかりなインストールと設定が必要なものが多く、XML はちょっと敬遠ぎみでした。Apache::ASP での、XML の取り扱いは、変換の定義づけの XLST ファイルを、.htacess への記載が必要など独自の拡張がされている面もありますが、比較的簡単に、XML パーシングサーバになりうると感じました。日本語文字コードを扱うためには、私のインストールメモでの、「XML Parser のインストールと日本語コードの設定」をご覧ください。これらのツールを使用して、オリジナルサイトの XML 実例を、和訳してみました。また、XML/XLST の文字コードとパーサでの有効性の関係を、XMLで表にまとめてみました。 |
<%=$index[3]%>*[2002/05/01]Apache::ASP 以外に、HTML 内に、Perl スクリプトを埋め込むソリューションを、2,3 挙げておきます。 上記は現在のところ、インストールしていない/できないので、詳細は調べていません。 タグにも特色があり、[ ] や、<? !> などあるようです。 また、Ruby にも、mod_ruby+eruby があり、こちらの方が軽そう? 結局、Apache::ASP は限りなく、(良し悪しは別にして) ASP っぽくというのが、特色でしょうか? *[2002/05/03] インストールに関して SUGAWARA さんから以下の情報をいただきました。ありがとうございます。 ・mod_perlのインストールはCPANモジュールを使って cpan> o conf makepl_arg 'USE_APXS=1 EVERYTHING=1' cpan> install mod_perl とするのが楽かもしれない。 ・Win32のApahce + ActivePerlでも ppm install http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd としてmod_perlを入れれば動くらしい(未確認) |