お世話になっております。
Linux上のPerlは扱い慣れているのですが
現在WindowsServer2003R2上で動作するPerlのメンテナンスをしようとしております。
退職された方が作成したスクリプトの一部がどうしても動作しないので
多分FileOpenの失敗だと思うのですが
どこのファイルか判断つかないのでエラーログを見てみても
C:\WINDOWS\system32\LogFiles\HTTPERR
にあるとの事なので
最新のhttperr30.log
を見ても
2020-07-15 05:48:58 192.168.1.170 60496 192.168.5.24 80 - - - - - Timer_ConnectionIdle -
ぐらいしか書いてありません。
WindowsServer2003R2 の Perlのエラーログにもう少し詳しくエラー表記を表示してほしいのですが
そのような設定は無いのでしょうか?
基本的な事をお伺いして大変申し訳無いのですが上記お問い合わせいたします。
Perlは後付けでインストールしているはず(ActivePerlとか?)なので、Windows標準でそのような設定をするものはないです。httperrと言うことは、CGIで動作しているのでしょうか?良く分かりません。いつ、どんなきっかけで動いたPerlスクリプトなのか明らかにしないと誰も答えられないと思います。
dodox86 様
アドバイスありがとうございます。
おっしゃる通りActivePerl5.6.1をインストールしております……
Windows標準でエラー出力を詳細にする方法は無いのですね……
ありがとうございました。
ちまちま
printf("");
exit;
と入力してデバッグしてみます。
メッセージありがとうございました。
IISで稼働させているCGIなのであれば、標準エラー出力に出すことでUN*Xでのものと同様にエラーログに出力されるかと思います。
ありがとうございます。
そうかと予想して下記のようにやってみました。
```
D:\test2>perl schedule.pl?bukken=yamagata
'bukken' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```
現在cgiのPOSTデータを読み込ませる方法が分からないので調査中です。
本当にありがとうございました。
> perl schedule.pl?bukken=yamagata
いえ、それはコマンドラインオプションなので、そういうことではないのではないかと。CGIにとってのPOSTメソッドの扱いは、フォームのデータに関してそのCGIプロセスにとっての標準入力です。UN*XもWindowsの(IIS、apache2などでの)CGIでも同じです。
ああああああああああああ
大変申し訳ございません。
POSTではなくてGETでした。
schedule.pl?bukken=yamagata
の内部でドコかでエラーで躓いているので
コマンドプロンプトから出来れば良いと思っております。
……
こういったGETでデータ渡す方法はコマンドプロンプトからだと出来ないのでしょうか?
GETは、"QUERY_STRING"の環境変数で渡します。perlスクリプトの中でQUERY_STRINGをはじめとして必要な環境変数がセットされていれば、それで読み取れます。(と言うかそれがCGIの仕様です)
ありがとうございます。
微妙に私の説明が下手だったのですが
schedule.pl内で
```
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $a, $ENV{'CONTENT_LENGTH'});
}else{
$a = $ENV{'QUERY_STRING'};
}
```
とのように取得しているのですが
コマンドプロンプトではどのように渡すのがスマートなのかご助力頂けないでしょうか?
本当に申し訳無いのですがご助力頂けますようお願い申し上げます。
>perl schedule.pl?bukken=yamagata
Can't open perl script "schedule.pl?bukken=yamagata": Invalid argument
とのように?で渡せなくて困っております……
お言葉ですが、それはもう当初のご質問の主旨の範疇を超えていると考えます。これで最後にしていただきたいですが、コマンドプロンプト上では環境変数はSETコマンドで設定します。
例: C> SET QUERY_STRING=URLエンコードした文字列
CONTENT_LENGTHなどは適切な値をセットしてください。あとはすみませんが質問者さん自ら対応いただくか、新たに質問を挙げてください。(本質問も、当初の質問内容に一定の解決が得られたら、自己回答で閉じていただけますようお願いします)
了解いたしました。
長々と質問してしまい失礼しました。
回答1件
あなたの回答
tips
プレビュー