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

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

&html$FORM{page};

舌足らずな質問の仕方だと承知なのですが、サブルーチンの呼び出しに変数を使うにはどうしたらよいのでしょうか?よろしくお願い致します。

A 回答 (3件)

&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なんだろう。@:-)
    • good
    • 0
この回答へのお礼

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

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

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

どーも、ありがとうございました。

お礼日時:2001/01/19 14:24

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



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

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

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

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

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

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

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

また、別のファイルに

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

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

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

まだ、ちょっと自分の書き方が悪いです。スミマセン。

お礼日時:2001/01/19 14:00

変数からコードの生成は出来ますが、この目的で使って有意義と


思えません、面倒くさいし……

&haml('pagename1');


sub html {

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

……

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

……

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

この回答への補足

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
    • good
    • 0
この回答へのお礼

ありがとうございます。
でも、自分の言いたい事と違ったように思います。
もう一度、補足で書いて見ます。スミマセン。

お礼日時:2001/01/18 21:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報