Perl の $#ARGV について

[上に] [前に] [次に]
うほほ 1997/11/06(木) 21:45:23
Perl の $#ARGV は、本当に引数の数が入るのでしょうか?
なんどやっても-1 しかはいりません。なにかサーバーの
設定がわるいのでしょうか?どなたか同じような現象がで
たかたがいたら教えてください。

miyasiro [E-Mail] 1997/11/08(土) 01:22:54
$#ARGV は、引数の数 - 1 の値となります。
だから、引数がない場合は、-1 で正しい値です。
#$配列名は、最後の要素の添え字を表すものであり、
最初の引数は、C と異なり、perl では $ARGV[0] に格納される
ために、このようなことになります。

miyasiro [E-Mail] 1997/11/08(土) 02:04:57
ここの「perl入門(概要編)」を見たら、上のような説明が
ちゃんとされていますね。
 CGI で perl に引数を与える方法を知らないので、引数は
常になしだと思ってたのですが、何らかの方法で引数を与えて
いるのでしょうか? それとも、telnet とかで perl を起動する
ときの話でしょうか?
 だとすると、上の RES は、おおハズレです(苦笑)。

とほほ 1997/11/09(日) 23:15:14
CGIを呼び出す際に
<FORM METHOD=POST ACTION="cgi-bin/xx.cgi?arg1+arg2">
のように呼び出せば、$#ARGV が 1 になって、$ARGV[0] に
arg1 が、$ARGV[1] に arg2 が設定されると思います。

miyasiro 1997/11/10(月) 21:38:32
 ? 以降が POST の場合に引数にセットされるとは全く
知りませんでした。ご教授ありがとうございます。
 試しにうちの HP のサーバで試してみたところ、QUERY_STRING
と引数の双方にセットされるようです。

$ENV{'SERVER_SOFTWARE'}   = Netscape-Enterprise/2.01
$ENV{'REQUEST_METHOD'}    = POST
$ENV{'QUERY_STRING'}      = arg1+arg2
-------------------------------------------
$#ARGV    = 1
$ARGV[0]  = arg1
$ARGV[1]  = arg2

 ただ、perl が $#ARGV をセットしないというのは考え難い
と思うので、サーバの問題のような気もしますが…

miyasiro 1997/11/12(水) 22:35:54
すいません。WebMaster の「とほほ」さんの書き込みを、質問者の
「うほほ」さんによるものと勘違いしてました。申し訳ありません。
それから、ここの「CGI/SSI入門」をちゃんと読みました(苦笑)。
これによると、環境変数 QUERY_STRING へのセットよりも、引数への
セットの方が原則であるような印象を受けますね。こういう仕様は、
まったく知りませんでした。

[上に] [前に] [次に]