トップ(最新)

nDiki : CGI.pm

CGI.pm

CGI プログラム用の標準的な Perl モジュールPerl 5.005 から標準 Perl ライブラリに含まれるようになった。

バージョン別の注意

charset

header メソッドに対して、charset オプションが使えるようになったのは 2.57 から。 2.57 以降 (Perl v5.6.1 以降)は charset オプションに 'UTF-8' 等を指定すると、Cotent-Type ヘッダ に charset が追加されるようになる。

2.56 以前 (Perl v5.6 以前)は charset オプションの処理がないので、type オプションを 'text/html; charset=UTF-8' のように指定する必要がある。

PATH_INFO

Perl v5.8.8 同梱の CGI.pm 3.15 には PATH_INFO正規表現処理にバグがある。→ 記事

標準 Perl ライブラリとして同梱されているバージョン

Perl バージョンCGI.pm
5.0042.36
5.004052.42
5.0052.42
5.005_032.46
5.005_042.46
v5.6.02.56
v5.6.12.752
v5.6.22.752
v.5.7.32.80
v5.8.02.81
v5.8.13.00
v5.8.23.00
v5.8.33.01
v5.8.43.04
v5.8.53.05
v5.8.63.05
v5.8.73.10
v5.8.83.15
5.0093.00
5.0090013.04
5.0090023.07
5.0090033.15_01

関連情報

スポンサード リンク

Related term

2003年12月29日 (月)

[ WiKicker ] tDiaryテーマ互換モードの実装 このエントリーを含むはてなブックマーク

WiKickerベースの日記システム実装に合わせて、Wiki の方も tDiaryテーマ互換モードを実装しておく。

div の追加、class の変更など。 当然ではあるが表示要素が異なるので tDiaryのテーマの要素にうまくマッピングできないものが出てくるな。 どうしたものか。 できるだけ、近そうなものにはマッピングしてみたが。

補助用に複数の外部スタイシートを指定できるようにもしておく。 新し目のCGI.pm だと

 start_html(-style => {-src => [ 'a.css', 'b.css' ]})

のように直接複数指定できるのだが、古いやつだと駄目。-head の方に Link({-rel => 'stylesheet'...}) で複数指定する必要あり。

スポンサード リンク


[ 12月29日全て ]

2004年5月15日 (土)

[ WiKicker ] CGI.pm の依存度減らし このエントリーを含むはてなブックマーク

CGI::Link や start_html の呼び出しをやめて自前で処理したり。

CGI.pm では徹底的といえるほど AUTOLOAD を使うようになっていて、サブルーチンを最初に呼び出したときに _compile 中で eval により定義するようになっている。

使わないサブルーチンの構文解析等に時間がかからないというメリットがあるかわりに、_compile はそれなりに時間もかかるので自前でやれる部分は自分でやった方がちょっと速くなる。


[ 5月15日全て ]

2005年5月12日 (木)

iモード向けの簡単なCGI プログラムCGI::Session を使う このエントリーを含むはてなブックマーク

簡単なユーザ認証のある、iモード向けデータ入力CGI プログラムを作成。

当初ホスティングサービスのサーバ上に置くつもりだったので CGI.pm だけでちまちまと書いてみた。データは hidden で持ち歩けばいいかと思ったが、コーディングしているうちにiモード端末の制約などもあって面倒になってきた。

ということで融通のきくサーバを前提として CGI::Session を利用するように作成変更。セッションオブジェクトにデータを置くようにしたら、急に楽になった。 やっぱり hidden は無理があるな。


[ 5月12日全て ]

2006年7月8日 (土)

Perl v5.8.8CGI.pmPATH_INFO 処理の問題にぶつかる このエントリーを含むはてなブックマーク

手元の WiKicker (や DiKicker) で、「C++」という文字列を含む URI にアクセスしたらエラー

 Nested quantifiers in regex; marked by <-- HERE in m//C++ <-- HERE .html$/ at (eval 27) line 7.

正規表現の一部として使う時には \Q...\E していたと思ったが抜けがあったか。 とコードをチェックしてみたが、それっぽいところなし。 そもそも、Perl 5.005_03 だと問題おきていないし。

確認したら CGI.pm の url() の中でのエラーだった。 quotemeta されていない。

Perl v5.8.8 に含まれている CGI.pm 3.15 で問題を確認。3.17 までは駄目で、3.19 以降だと \Q...\E するように修正されている (3.18 は CPAN にないので不明)。

標準 Perl ライブラリバグを踏んだか……。 標準 Perl ライブラリのアップグレードはなにかと面倒なので、システム要件にはしたくはないんだよねぇ。


[ 7月8日全て ]

2006年7月15日 (土)

一般ユーザで Apache 2.0 を起動する最小限の httpd.conf このエントリーを含むはてなブックマーク

Perl CGI プログラムのテストの自動化には

などがある。 Apache を使うのがより実際の環境に近いテストができるのだが、通常動いている Apache を使って make test でテストできるようにするとすると「どこに配置するか」などの問題がでてくる。

となればいっその事、自分(一般ユーザ)で専用に Apache を起動した方が良さそうだ。 httpd.conf を用意するのが面倒だが、highperformance.conf 等をみる限り実はそれほど必須の設定は多くないようである。

@ httpd.conf を書く

ということで Debian GNU/Linux sidApache (2.0.55-4) で必要な設定は何か試してみた。少なくとも以下の設定は書いておく必要があるようだ。

 # httpd.conf for Debian GNU/Linux Apache 2.0.55-4
 Listen       9100
 ServerRoot   .
 DocumentRoot /home/naney/htdocs
 ErrorLog     error_log
 TypesConfig  /etc/mime.types
 PidFile      apache2.pid

これを httpd.conf として保存して、

 /usr/sbin/apache2ctl -f httpd.conf

で起動すればアクセスできるようになる。

 /usr/sbin/apache2ctl -f httpd.conf -k stop

で停止。

ServerRoot は起動時の -d オプションでも指定できるのだが、httpd.conf に書いておかないとうまく起動してくれなかった (-X を一緒に指定してデバッグモードにする場合は ServerRoot 無しに -d 指定だけでも動く)。

@ CGI プログラムを動くようにする。

CGI プログラムを動くようにするとすると例えば次のような感じ。

 # httpd.conf for Debian GNU/Linux Apache 2.0.55-4
 Listen       9100
 ServerRoot .
 DocumentRoot /home/naney/htdocs
 ErrorLog     error_log
 TypesConfig  /etc/mime.types
 PidFile      apache2.pid

 LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
 Options +ExecCGI
 AddHandler cgi-script .cgi

@ make test で動くようにするには……

ディストリビューション独自のパッケージングなどに対応するように、多少泥臭く環境検出する必要があるが、なんとか make test から呼べそうだな。

最近は WWW::Mechanize::CGIお気に入りなのだが、2つ以上の CGI プログラムにまたがるようなアプリケーションのテストには向かなさそうなので、今度この方法でも試してみたい。


[ 7月15日全て ]

2007年4月7日 (土)

携帯電話(iモード)から Twitter を更新する このエントリーを含むはてなブックマーク

Twitter をいろいろ遊んでみて「やはり携帯電話から更新できないと」と思えてきた。

携帯電話からメールを送る事で Twitter にアップデートをかけてくれるゲートウェイを設置できれば一番いいのだけれど、そのようなメールアドレスを作る場所が今はない(さすがに会社のサーバはまずい)。

ということでiモードから更新をかけられるように短い CGI プログラムを書くことにした。 CPAN には Net::Twitter という Perl モジュールがあるのだが、JSON::Any (と JSON::XS / JSON / JSON::DWIW / JSON::Syck のどれか)が必要で、ちょっと大げさなので今回は使用は見送り。 普通に CGI.pm と LWP::UserAgent で書いた。

 #!/usr/bin/perl -w

 use 5.005_03;
 use strict;
 use CGI qw(-no_xhtml);
 use Jcode;
 use LWP::UserAgent;

 my $query     = CGI->new;
 my $user_name = $query->param('u');
 my $password  = $query->param('p');
 my $status    = $query->param('s');

 $user_name = '' unless defined $user_name;
 $password  = '' unless defined $password;
 $status    = '' unless defined $status;

 my $message = '';

 if ($user_name ne '' && $password ne '' && $status ne '') {
   my $ua = LWP::UserAgent->new;
   Jcode::convert(\$status, 'utf8', 'sjis');
   $ua->credentials('twitter.com:80', 'Twitter API', $user_name, $password);
   my $request = $ua->post('http://twitter.com/statuses/update.json',
                           {status => $status . ' '});
   if ($request->is_success) {
     $message = '<p>OK</p>';
   }
 }

 print $query->header(-type => 'text/html', -charset => '');
 print '<html><head><title>Twitter update</title></title><body>';
 print '<form method="post" action="twitter">';
 print 'ユーザ名:',   $query->textfield('u'),      '<br>';
 print 'パスワード:', $query->password_field('p'), '<br>';
 print 'ステータス:', $query->textfield('s'),      '<br>';
 print '<input type="submit">';
 print '</form>';
 print $message;
 print '</body></html>';

とりあえずこれで、iモードから送信できることを確認。 パスワードの入力が面倒だけれども、サーバ側に書いておくのも嫌なので毎回送ることにした。FOMA 端末側には定型文として保存しておく以外にいい手はないのかな。

最初うまく送れなくてなんだろうと思ったが、あきやん氏の「Twitterで日本語を入力する方法 (akiyan.com)」の記事にある

  • 全て全角文字で入力して、最後に半角スペースをいれる
  • 半角全角を混在させるときは、半角文字と全角文字の間にスペースをいれる

といった日本語を入力する際の注意点がらみだったようである。 とりあえず CGI プログラムの方で最後に必ずいわゆる半角空白を追加するようにしておいた。

文字数チェックとか Twitter API の返り値チェックとか、改善すべきところはいろいろあるけれど、自分用にはまずこれでいいかな。

気が向いた時に外出先から更新かけます。


[ 4月7日全て ]

スポンサード リンク

■よく検索されるキーワード

torrent(62) windows(62) perl(58) 提案書(48) 書き方(47) linux(44) アジェンダ(32) usb(29) 動画(27) x31(27) 使い方(27) 手帳(25) ssh(25) mp980(23) thinkpad(22) svn(21) ほぼ日手帳(21) java(21) インストール(20) 画像(20) debian(20) ドラマ(16) subversion(16) cvs(15) ubuntu(15) 設定(15) 秋葉原(14) gmail(13) ヨドバシ(13) 無料動画(13) tortoisesvn(13) dropbox(13) c#(12) .net(12) 壁紙(12) make(12) gnu(12) ノート(11) ヨドバシカメラ(11) a6(11) tc-1(11) ganttproject(11) 冷蔵庫(11) 宮根誠司(11) porter(11) 無印(10) フリー(10) 筆まめ(10) tar(10) 充電式カイロ(10) 方眼(9) パスワード(9) 日本語(9) visual(9) cwrsync(9) wiki(9) gimp(9) フォーマット(9) firefox(8) ボールペン(8) nullpointerexception(8) grub(8) skk(8) ppm(8) ご査収(8) ダウンロード(8) ケース(8) サンプル(8) 提案書の書き方(8) 無料(8) 無印良品(8) google(8) 2008(8) gtd(8) 3.5(8) framework(8) ツール(8) cgi(7) mew(7) バッグインバッグ(7)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.092027s / load averages: 0.17, 0.26, 0.22
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)