質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

解決済

2回答

1125閲覧

ActivePerlをコマンドプロンプト上で実行させる際の環境変数の渡し方を知りたい。(渡したい値に=あり)

ma2hiro

総合スコア159

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

0クリップ

投稿2020/07/15 08:27

編集2020/07/16 01:03

お世話になっております。

基本的な事で質問して申し訳ございません。
WindowsServer上のPerlのエラーログにファイルオープンエラーを表示させる方法が知りたい
内でdodox86様よりご助力頂き上記問題は解決したのですが
新たな疑問点が出てきたため質問失礼いたします。

下記のようにPerl内でPOSTやGETデータを取得しております。

perl

1 2if ($ENV{'REQUEST_METHOD'} eq "POST") { 3 read(STDIN, $a, $ENV{'CONTENT_LENGTH'}); 4}else{ 5 $a = $ENV{'QUERY_STRING'}; 6} 7@a = split(/&/,$a); 8foreach (@a) { 9 ($variable,$value) = split(/=/); 10 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; 11 if($variable eq "year"){ 12 $year = $value; 13 } 14 if($variable eq "mon"){ 15 $mon = $value; 16 } 17 if($variable eq "title"){ 18 $title = $value; 19 } 20 if($variable eq "bukken"){ 21 $bukken = $value; 22 } 23} 24 25$year =int($year); 26

IIS上のPerlからでは

URL

1schedule.pl?bukken=yamagata&tab=yamagata&year=2020&mon=7

とデータを取得しています。

でしがデバッグしようとしている
コマンドプロンプト上からでは上記値をどうやって渡すのがスマートなのか
ググっても良く分からなかったので質問してよろしいでしょうか?

QUERY_STRINGに値をいれようと下記のようにしてみたのですが

D:\schedule2>set QUERY_STRING test 環境変数 QUERY_STRING が定義されていません

と表示されます。

お忙しいところ大変申し訳無いのですが上記お問い合わせいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/07/15 08:35 編集

> QUERY_STRINGに値をいれようと下記のようにしてみたのですが > D:\schedule2>set QUERY_STRING test 回答は控えるつもりですが、ここだけコメントします。先のご質問のコメント欄で私が以下、例示したように、 例: C> SET QUERY_STRING=URLエンコードした文字列 「SET 環境変数名=値」です。"="'が抜けています。コマンドなのですから、ヘルプやリファレンスを確認しましょう。また、基本的にCGIの考え方はLinuxと同じです。
DreamTheater

2020/07/15 23:17

環境変数の設定方法に関する質問なので、Perlタグは不要ですね。 タイトルも引数ではなく環境変数に変更しましょう。
ma2hiro

2020/07/16 01:05 編集

>dodox86さん 本当に度々申し訳ございません。 ↓のKojiDoiさんの返答に書いたように =をつけてやると ``` D:\schedule2>set QUERY_STRING=bukken=yamagata&tab=yamagata&year=2020&mon=7 'tab' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 'year' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 'mon' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ``` となってしまうのです…… >DreamTheaterさん 仰るとおりですね…… 前回の流れで作成して失礼しました。 修正しました。
dodox86

2020/07/16 01:21

>@ma2hiroさん > 'tab' は、内部コマンドまたは外部コマンド、 ... > となってしまうのです…… いや、そうではなく、「SET QUERY_STRING=URLエンコードした文字列」 って書いたではないですか。「URLエンコードした文字列」です。GETのURLに含まれるクエリー文字列の"key=value"...はそのままでは環境変数にセットできません。CGIの仕様自体を再度確認してください。正直、そこから確認、理解しないと本問題の解決、ひいてはCGIのデバッグはできないと思います。 老舗のとほほさんのサイトをご案内しておきます。[とほほのCGI入門]http://www.tohoho-web.com/wwwcgi.htm
dodox86

2020/07/16 01:48 編集

>@ma2hiroさん まぁ、"bukken=yamagata&tab=yamagata&year=2020&mon=7"のクエリー文字列に限って言うと、URLは恐らく以下のようなものだとして http://server/cgi-bin/schedule.pl?bukken=yamagata&tab=yamagata&year=2020&mon=7 CGIに渡されるQUERY_STRING環境変数は以下のようになるはずです。(=は結局、そのまま) bukken=yamagata&tab=yamagata&year=2020&mon=7 これをSETコマンドでそのままセットしようとしてもうまくいかないので、2重引用符で括るしかないでしょうか。 set QUERY_STRING="bukken=yamagata&tab=yamagata&year=2020&mon=7" ただ、これをCGIのプロセス内で参照したとき、2重引用符がそのままかもしれないので注意してください。setコマンドのオプションなどを併用しても尚、使えなければ、別の方法を考える必要があると思います。
dodox86

2020/07/16 02:03

私の[2020/07/16 10:47]のコメントより引用: > これをSETコマンドでそのままセットしようとしてもうまくいかないので、2重引用符で括るしかないでしょうか。 > set QUERY_STRING="bukken=yamagata&tab=yamagata&year=2020&mon=7" > ただ、これをCGIのプロセス内で参照したとき、2重引用符がそのままかもしれないので注意してください。 たびたびすみません、この点だけ確認してみました。SET QUERY_STRING="key=value" と実行すると、環境変数の値としては前後の2重引用符も含まれました。ご注意ください。
ma2hiro

2020/07/16 02:07

dodox86さん 本当に度々ありがとうございます。 > set QUERY_STRING="bukken=yamagata&tab=yamagata&year=2020&mon=7" とやると"も含まれますので perlソース内で"は削除するようにして実装してみようと思います。 本当にご助力頂き感謝いたします。
dodox86

2020/07/16 02:14

お使いのCGIの全ソースは分かりません(貼られても困ります)が、perlモジュールなどを使ってフォームのパラメータを解析するなどしていた場合、QUERY_STRING環境変数の処理タイミングなどに影響すると思いますのでご注意ください。以上です。
ma2hiro

2020/07/16 02:28

本当にありがとうございました。 またご迷惑をおかけして本当に申し訳ございません。 一刻も早く皆様のお力添えが出来るように技術を学んで参ります。
guest

回答2

0

DOSプロンプトで環境変数を設定したいという話なら、

set QUERY_STRing=test

ではないでしょうか。

投稿2020/07/15 08:31

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ma2hiro

2020/07/16 00:52

KojiDoiさん コメントありがとうございます。 私の説明不足で大変申し訳ございません。 現在ActivePerlのデバッグをしようとしております。 そのソース内で引数を読む方法として以下のようにしております。 ```perl if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $a, $ENV{'CONTENT_LENGTH'}); }else{ $a = $ENV{'QUERY_STRING'}; } @a = split(/&/,$a); foreach (@a) { ($variable,$value) = split(/=/); $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if($variable eq "year"){ $year = $value; } if($variable eq "mon"){ $mon = $value; } if($variable eq "title"){ $title = $value; } if($variable eq "bukken"){ $bukken = $value; } } ``` このスクリプトに読み込ませるため ``` D:\schedule2>set QUERY_STRING=bukken=yamagata&tab=yamagata&year=2020&mon=7 ``` とやってみると ``` D:\schedule2>set QUERY_STRING=bukken=yamagata&tab=yamagata&year=2020&mon=7 'tab' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 'year' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 'mon' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ``` とPerlでの変数の渡し方が不明ですので質問してしまいました。 ""で囲んでも駄目でしたのでどうするのかご助力頂けないでしょうか? お忙しいところ大変申し訳無いのですが上記お問い合わせいたします。
guest

0

自己解決

受け取るperl側に

if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $a, $ENV{'CONTENT_LENGTH'}); }else{ $a = $ENV{'QUERY_STRING'}; } $a =~ s/"//g;

として

D:\schedule2>set QUERY_STRING="bukken=yamagata&tab=yamagata&year=2020&mon=7"

と強引に渡して

D:\schedule2>perl schedule.pl

で確認して解決しました。

コメント下さった皆様ありがとうございます。

投稿2020/07/16 05:47

ma2hiro

総合スコア159

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問