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>
EOD
 PerlIS.dllにはHTTPヘッダを自動で出力してくれる小さな親切(余計なお世話)機能があって自分で出力しようとしたHTTPヘッダがHTTPヘッダではなく本文として扱われてしまって、CGIプログラムが上手く動かなくなるという問題があります。
 ステータスコードから書けばHTTPヘッダの自動出力が行われなくなるので、そのように対策方法がありますが、レジストリの設定でON/OFFを切り替えられます。My CGI scripts don't seem to run right under PerlIS.
 おかげでPerlIS.dllで動かす場合でも普通のCGIを同じようにスクリプトを書けます。

関連項目

なし