Lunatic Sol

IT Tips

環境変数を表示する Perl CGI

2005-02-16 17:38:31 | Perl
http://hpcgi2.nifty.com/sheeplays/env.cgi?TestQuery=hoge

ソースはこんな感じ。どんな環境変数があるのか?ってチェックする時にも使えますし、一覧をずらーと出すだけでも使えます。

#!/usr/local/bin/perl

print "Content-type: text/html\\r\\n\\r\\n";

print "<HTML>\\r\\n";
print "<HEAD><TITLE>環境変数</TITLE></HEAD>\\r\\n";
print "<BODY>\\r\\n";
print "<H1>環境変数</H1>\\r\\n";

print "<TABLE border=0>\\r\\n";
print "    <THEAD>\\r\\n";
print "        <TR BGCOLOR=#ff9900>\\r\\n";
print "        <TH>KEY</TH>\\r\\n";
print "        <TH>VALUE</TH>\\r\\n";
print "        </TR>\\r\\n";
print "    </THEAD>\\r\\n";
print "    <TBODY>\\r\\n";
foreach my $key( keys %ENV ){
    print "        <TR BGCOLOR=#FFFF99><TD>$key:</TD><TD>$ENV{$key}</TD></TR>\\r\\n";
}
print "    </TBODY>\\r\\n";
print "</TABLE>\\r\\n";
print "</BODY></HTML>\\r\\n";

サブルーチンの引数

2004-10-14 15:05:03 | Perl
こんなもんです、と理解してしまえばいいんでしょうが、変な構文ですよね、Perl って。

サブルーチンに引数を渡したいとき、他の言語の場合って () で受け取る引数を明示しますが、perl の場合は特殊変数の @_ (配列) で処理するんですね。

例えば test っていうサブルーチンに hogehoge という文字列を渡したい場合は、() で囲って渡して、で受け取った test サブルーチンの中で @_ 特殊変数や $_[0] といった特殊変数の配列要素を使って処理します。

&test("hogehoge");

sub test {
    print $_[0];
}

サブルーチン Perl講座 [SMART!]

Perl でのファイル削除は unlink

2004-10-13 18:40:51 | Perl
久々に perl 書いた。そしたら、全然わからんくて、リファレンスやら本のサンプルやらとにらめっこ。ファイルの削除がわからず、困った困った。いっそのこと system() 使って rm で消しちゃう?なんて思ったり。

とほほのperl入門 - unlink

探しているついでに、きれいにまとまっていそうなサイトも見つけたのでリンクしちゃう。

SMART!ウェブ講座 Perl

HTTP::Daemon を使った http トレース

2004-02-17 15:09:43 | Perl
先日 http リクエストのダンプという記事を書いた。今日はそのトレースをする必要があり、せっかくなので ActivePerl を使って試してみた。

C:\\>perl -MHTTP::Daemon -e 'warn HTTP::Daemon->new(LocalPort => 80)->accept->get_request->as_string'
Can't find string terminator "'" anywhere before EOF at -e line 1.
全然だめ。エラーになってしまう。ActivePerl のバージョンがまずい?パッケージがない?いや、エラーの内容からしてパッケージには問題はなさそう。ActivePerl にも問題はない。じゃ、Syntax?

ということでググってみたら W32 版 ActivePerl の場合 Single Quotation ではなくて -e の後は Double Quotatation で囲んだほうが良さそうだということが伺えた。ということでもういとどチャレンジ。
C:\\>perl -MHTTP::Daemon -e "warn HTTP::Daemon->new(LocalPort => 80)->accept->get_request->as_string"
GET http://www.google.co.jp/ HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: ja
Host: www.google.co.jp
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)
Proxy-Connection: Keep-Alive
うん、確かにとれた。でも、一回こっきりなんだねぇ。ということで、ちょっと使い勝手が悪いかな。ヘッダをとりたいだけとかなら使えるかもしれない。例えばブラウザの User-Agent を調べたいとか。

あ、あと実はちょっと悩んでしまったんだけど、ブラウザの Proxy 設定で localhost:80 を指定してあげないとトレースできません。当然といえば当然なんでしょうが、なぜか悩んでしまった。。。

p.s. HTTP::Proxy を使った簡易 Proxy ネタも LindowsOS開発日記に書いていました。今度はそっちを試してみようかな。そっちの方が実は使いたい機能だと思うので。

http リクエストのダンプ

2004-02-15 01:01:14 | Perl
仕事柄 http リクエストをダンプすることは良くあります。今までは

のいずれかでやってましたが、今日LindowsOS開発日誌見ていたらおもしろいの見つけました。

$ perl -MHTTP::Daemon -e 'warn HTTP::Daemon->new(LocalPort => 80)->accept->get_request->as_string'

お手軽にhttpリクエストをダンプします。

私の環境には常に ActivePerl は入れるようにしているので、これはつかえるかもしれません。Cygwin 環境でもいけるかな。

ちなみに、なぜ LindowsOS のサイトを見ていたか、というと今日図書館で月刊アスキー10月号のバックナンバーを借りてきて、LindowsOS がついていたのでまぁどんなもんかなと。そう思って見てたのでした。ベースが Debian なので LotusScript ネタはこのプラットフォーム上では無理なんだけどね。