-PR-
解決済み

サブルーチンの呼び出しに変数を使うには。

  • すぐに回答を!
  • 質問No.29510
  • 閲覧数73
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

初心者なので頓珍漢な事をお聞きしているかもしれないですがお願いします。

htmlページの分岐を行いたいと思ってまして、1ページ、1サブルーチンにしてhtmlを埋め込んでいます。その分岐の呼び出しに以下のような、命令で処理したいと思ったのですが上手くいきません。

&html$FORM{page};

舌足らずな質問の仕方だと承知なのですが、サブルーチンの呼び出しに変数を使うにはどうしたらよいのでしょうか?よろしくお願い致します。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル8

ベストアンサー率 62% (25/40)

&html$FORM{page};

という書き方はできません。
サブルーチンを実行する部分を次のようにしてみてはどうでしょう。

eval "&html$FORM{page}";

evalは次に書かれている式をperlのプログラムとして解釈して、
実行してくれる命令です。
$FORM{page}が1のときは、
"&html$FORM{page}"→'&html1'
となり
&html;
が実行されます。
もしサブルーチンがないなどのエラーがevalで生じたときは、
$@という特殊変数にそのエラーがセットされています。
下のようにエラー処理をするのが普通ですね。

eval "&html$FORM{page}";
if($@){
# エラー処理。
if($@ =~ /Undefined subroutine/){
....
}
}
ご参考まで。
認証とか関係あるのかどうかは謎ですねえ。
どんなことをするCGIなんだろう。@:-)
お礼コメント
noname#107402

やっぱり書き方を変えれば、動くんですねー。確認できました。
evalって結構使うんですかね。

フォーム入力でパスワードを管理していて、その値でページの分岐、生成をしています。(実際には値でなくて、パスワード入力で生成されたページからのリンクの引数で分岐なんですけど、、)

この自分の文章で伝わるものか、プログラムは質問するのも難しいです。

どーも、ありがとうございました。
投稿日時 - 2001-01-19 14:24:28
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル14

ベストアンサー率 25% (873/3452)

変数からコードの生成は出来ますが、この目的で使って有意義と
思えません、面倒くさいし……

&haml('pagename1');


sub html {

if($_[0] eq 'pagename1') {

……

} elsif($_[0] eq 'pagename2') {

……

と、引数でたらたらたら、と、書いていけば良いと思いますが。
htmlを別ファイルにして埋め込まないほうが管理し易いと思いま
すけども。
補足コメント
noname#107402

sub html1が埋め込んであるファイル
sub html2が埋め込んであるファイル
sub html3が埋め込んであるファイル
        :
        :
とたくさんhtmlファイルがあるんです。
で、本体プログラムファイルで、フォームで入ってきた値を見てページを分岐させたいと思っています。ページ生成する形だと認証が取れるのでそうしています。

if($FORM{page} ==1){
&html1;
}elsif($FORM{page} ==2){
&html2;
}elsif($FORM{page} ==3){
&html3;
}
というに書くのを止めて
&html$FORM{page};
この一行で処理したいんですけど上手くいかない。。。
やっぱりif文でツラツラと書かないと駄目なんでしょうか。

伝わりましたでしょうか?
投稿日時 - 2001-01-18 21:37:58
お礼コメント
noname#107402

ありがとうございます。
でも、自分の言いたい事と違ったように思います。
もう一度、補足で書いて見ます。スミマセン。
投稿日時 - 2001-01-18 21:57:41


  • 回答No.2
レベル14

ベストアンサー率 25% (873/3452)

えと、アンカーのために一応書いておきます。

> で、本体プログラムファイルで、フォームで入ってきた値を見てページを分岐させたいと思っています。
> ページ生成する形だと認証が取れるのでそうしています。

認証と言うのが解らないのですが……
とにかく必然が解りません。
サブルーチンで関数を定義しているのだから、funaさんのやりたい事との
可読性や手間は変わらないはずなのですが。

どうも変数からコード生成しないとメインにサブルーチンの内容をメイン
に埋め込まないといけないように考えているように読み取れるのですが、
もしそうなら私の先の例を良く見て下さい。
お礼コメント
noname#107402

何度もありがとうございます。

認証って変かな?と思っていたのですが、つまり、フォーム入力でパスワードを管理していて、その値でページの分岐、生成をしています。

htmlを埋め込んである別ファイルに

sub html {
if($_[0] eq 'pagename1') {
……

また、別のファイルに

sub html {
if($_[0] eq 'pagename2') {
……

とすれば良いということでしょうか?正直、初心者なものでニュアンスがわからないです。別ファイルに同じsub htmlを書くのに抵抗がありますし、htmlを埋め込んである別ファイルのif文をページごと変えなくてはいけないこともネックです。

元々、htmlが埋め込んである別ファイルのperl文は更新管理のため、一切修正したくないと思っているのです。

まだ、ちょっと自分の書き方が悪いです。スミマセン。
投稿日時 - 2001-01-19 14:00:11
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ