PerlIS.dllで動作しているかの確認方法
ActivePerlをIISで利用する場合、PerlIS.dllを利用する方法とperl.exeを利用する方法があります。
どちらの方法でスクリプトを実行しているかを知りたい場合$ENV{PERLXS}を調べると分かります。PerlIS.dllで動作している場合には「PerlIS」という値が入ります。
use strict; use warnings; use utf8; binmode STDOUT, ":utf8"; print "Content-Type: text/html; charset=utf-8\n\n"; print <<EOD; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <title>テスト</title> </head> <body> <p> EOD if (defined $ENV{PERLXS} and $ENV{PERLXS} eq 'PerlIS') { print "PerlISで動作しています。\n"; } else { print "PerlISで動作していません。\n"; } print <<EOD; </p> </body> </html> EODPerlIS.dllにはHTTPヘッダを自動で出力してくれる小さな親切(余計なお世話)機能があって自分で出力しようとしたHTTPヘッダがHTTPヘッダではなく本文として扱われてしまって、CGIプログラムが上手く動かなくなるという問題があります。
ステータスコードから書けばHTTPヘッダの自動出力が行われなくなるので、そのように対策方法がありますが、レジストリの設定でON/OFFを切り替えられます。My CGI scripts don't seem to run right under PerlIS.
おかげでPerlIS.dllで動かす場合でも普通のCGIを同じようにスクリプトを書けます。