• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サブルーチンについて)

HTMLのサブルーチンでPOSTされたデータを処理する方法

このQ&Aのポイント
  • HTMLからPOSTされる複数のデータをサブルーチンの引数に渡す方法と、サブルーチンからの戻り値をフォームに返す方法について教えてください。
  • 現在は「&ReadParse」を使って$inから値を取り出していますが、数十個の値が一度にPOSTされるため、値を取り出すコードが膨大になってしまいます。
  • Perl初心者ですので、より効率的な方法があれば教えていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

$in の値が、@pairs に格納してあるとして、 >$values = func($para1,$para2,$para3,$para4,$para5); は、 $values = func(@pairs); で良いと思います。 $para1 とかは、$pairs[0], ($paraN→$pairs[N-1]) で取り出せますから、特別、$paraNの変数を別に使う必要はないと思います。 >フォームに(Key=A&値=B…)の感じで返したいのですが については、(意味が)よくわかりません。

polalis
質問者

補足

BLUEPIXY様、本当にいつもありがとうございます。 サブルーチンに、そのまま配列を渡しても処理は出来るのですね。 とても勉強になります。 そこで、例えばサブルーチンの中のサブルーチンに、この値をそのまま渡したい ときは、@_とかでいいのでしょうか? >フォームに(Key=A&値=B…)の感じで返したいのですが はフォームへのレスポンスで、デコードされる前の形状で値を返したいといった感じ なのですが、う~ん…自分のなかでまとまっていないのに、質問してしまったことを お詫びします。。 この件に関しては、また今度お尋ねさせて下さい(苦)

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1>例えばサブルーチンの中のサブルーチンに、この値をそのまま渡したいときは、@_とかでいいのでしょうか? もちろん、@_ を渡すことはできますが、 もし、サブルーチンで@_ の内容を(一旦他の変数へ代入しないで)直接変更した場合、呼び出し元の値が変更されてしまうので注意が必要です。 例: sub func1 { print "func1 before:" . join(",", @_) . "\n"; func2(@_); print "func1 after:" . join(",", @_) . "\n"; } sub func2 { print "func2 before:" . join(",", @_) . "\n"; foreach(@_){ $_++; #@_ の内容を+1する } print "func2 after:" . join(",", @_) . "\n"; } my @array = (1,3,5,7,9); func1(@array); print "org:" . join(",", @array); 結果: func1 before:1,3,5,7,9 #func2 を呼び出す前の値 func2 before:1,3,5,7,9 #func2 で@_ で値が取れている func2 after:2,4,6,8,10 #@_ の要素を+1した func1 after:2,4,6,8,10 #呼び出し元の値が変更されている org:2,4,6,8,10 #呼び出し元の値が変更されている #1>お詫びします。。 お詫びなんかしなくていいです。 フォームに返すというのがよくわからなかっただけなので。 単に表示したいだけならprint すればいいように思いますが それが、やりたいことなのかどうかよくわかりません。

polalis
質問者

お礼

BLUEPIXY様、返事が遅れてしまいました。 またまた、アドバイスありがとうございます。 直接@_を操作すると、元の値が変わってしまうんですね。 なるほど~勉強になりました。 やはり、一度違う配列かスカラにコピーしてから、操作したほうが良さそうですね。 POST操作の方は、またの機会訪ねさせて頂きます。 BLUEPIXY様、いつも助けてくださってありがとうございます。

関連するQ&A

専門家に質問してみよう