• ベストアンサー

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

y_okuの回答

  • ベストアンサー
  • y_oku
  • ベストアンサー率62% (25/40)
回答No.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なんだろう。@:-)

noname#107402
質問者

お礼

やっぱり書き方を変えれば、動くんですねー。確認できました。 evalって結構使うんですかね。 フォーム入力でパスワードを管理していて、その値でページの分岐、生成をしています。(実際には値でなくて、パスワード入力で生成されたページからのリンクの引数で分岐なんですけど、、) この自分の文章で伝わるものか、プログラムは質問するのも難しいです。 どーも、ありがとうございました。

関連するQ&A

  • PHPからHTMLへの変数の受け渡し

    form.html→page1.php→page2.php というようなページをつくり、form.htmlでテキストエリア等<form>を使いpage1.phpにデータ:nameを送るとします。 その際$name = $_POST['name'];とするとphpでの変数になってしまってpage1のhtml上では認識されませんよね? page1からpage2に移動するときにform.phpでいれたnameのデータも <input type="hidden" name="名前" value="name"> というように使いたいのですがその際page1内でphpでの$nameをhtmlのnameに代入というかデータの受け渡しが必要になるかと思うのですがそれはどのように記述すればいいのでしょうか? ご教授よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで変数のデータ受け渡しについて

    HTMLで下記のようにして入力された データを次ページに受け渡し、 issetで変数に値が代入されていれば ifで分岐処理させたいのですが、 elseの処理しかできません。    <FORM action="次ページ.php" method="GET">    キーワード<BR>    <INPUT type="text" name="keyword">    <INPUT type="submit" value="ボタン"> ボタンをクリックしたら次ページで    if (isset($keyword)) {     分岐処理1;     }    else{     分岐処理2;     } と行いたいのですが、$keywordに値が 代入されているにも関わらず elseの処理がされてしまいます。 どこか構文が間違っているのでしょうか。 どうか教えてください。

    • ベストアンサー
    • PHP
  • ヒアドキュメントでHTMLを書いて次へをクリックするとサブルーチンが表示される方法は?

    こんにちわ。perlでCGI学んでます。初心者です。 CGIの中にヒアドキュメントでHTMLを書きました。 そのページの最後に「次のページへ」というフォームボタンをつけました。ボタンをクリックするとサブルーチンの次ページが表示されるようにしたいのですが、うまくいきません。ボタンはinputタグのボタンにしたいので、テキストリンクにはしません。 「次のページへ」をクリックするとサブルーチンのpage1の中が表示されるようにするにはどうしたらいいですか?hiddenタグをボタンの下に書けばいいといわれたのですが、どうもうまくいきません。ご存知のかた、ご教授願います。 以下のようにソースを書きましたがうまくできません。。。。 #!/usr/bin/perl $script="test.cgi" print <<"EOF"; Content-type: text/html <html> <head> <meta content="text/html; charset=shift_jis"> <title></title> </head> <body> あなたの注文したものは●●です。 よろしかったら次のページへを押してください。 <form method="post" action="$script"> <input type="submit" value="次のページへ"> <input type="hidden" name="page1" value="page1"> </form> </body> </html> EOF ####サブルーチン###################### sub page1{ print <<"EOF"; Content-type: text/html <html> <head> <meta content="text/html; charset=shift_jis"> <title></title> </head> <body> お買い上げありがとうございました。 </body> </html> EOF }

    • ベストアンサー
    • CGI
  • Perl/JavaScript/サブルーチン

    はじめまして。 今ちょっといじってるプログラムについてお聞きしたいことがあります。 index.htmlのtextareaからmy.cgiを呼び出したい のですが。my.cgiというのは 1.textareaに入力された文章をデータベースに保存。 2.日付順にソートし新しいものを一つだけ取り出す。 3.index.htmlに表示する というものなのですが。 デフォルトでtextareaに一番新しい情報が入るようにしたいのです。valueで指示したのですがJavaScriptが邪魔してブラウザに反映されません。ソースを見るとvalue="********"とはいっています。 my.cgiを呼び出す命令を記述したmy.jsというファイルを作ってサブルーチンのように扱うという方法も考えているのですが、呼び出しやindex.htmlに表示させる記述の仕方が分かりません。 どなたか分かる方は、どうぞ宜しくお願いいたします。

  • javascriptにphpの変数を用いる

    JavaScriptでサブウインドウのフォームから親ウインドウのフォームにデータを送るプログラムを書いています。 親ウインドウのページによって処理を変えているのですが、phpの変数を使うと関数自体がエラーになってしまいます。 どう書くのが正しいのでしょうか?教えてください。 プログラムは下記です。 if(page=="0"){ window.opener.document.form_name.input_name.value=input_data; window.close(); } else{   for(i=1; i<6; i++){     var pagename = "page_"+i;     if(page == pagename){ window.opener.document.<?php echo $_GET[form_name]; ?>.<?php echo $_GET[input_name]; ?>.value=input_data; window.close();   } }

  • use strictを宣言してlocal変数を使うには?

    Perl初心者です。初歩的な質問ですが、 サブルーチンの中で my だと、その下の{ } ブロックではmyで宣言したローカル変数がスコープされないので  localを使うのではないかと思いますが、 それだと、use strictではエラーになります。 こんなときどう処理したらよいのでしょうか。

    • ベストアンサー
    • Perl
  • foreachでループした変数を他のサブルーチンに受け渡す方法を教えてください。

    ループして変数に入る値を他のサブルーチンに渡すにはどのようにしたらいいのでしょうか?以下に記述を書きましたが、sub mainの中の$dataをsub htmlの中で表示させて、sub mainでループさせた値をすべてsub mailへわたしたいのです、hiddenタグで<input type=\"hidden\" name=\"all\" value=\"$all\">とやってもうまくいきませんでした。@inの中をループさせるので@inをそのままかけばいいのでしょうか?これもうまくいきませんでした。。ようはループさせた値をすべてメールで送信したいのです。どうしたらうまくできますでしょうか? sub main{ foreach(@in){ ($name1,$value1) = split(/=/,$_); $data="$name1 : $value1"; print "$data"; print "<br>"; } sub html{ print "Content-type: text/html\n\n"; print <<EOF; <html> <head> </head> <body> &main; <form action="" method=""> <input type=\"hidden\" name=\"all\" value=\"$all\"> <input type=\"submit\" value=\"送信する\"> </form> </body> </html> EOF } sub mail { ####省略しますが、ここはメールの送信の記述です。 }

    • ベストアンサー
    • Perl
  • エクセルマクロのサブルーチン引数で配列を使用したい

    VBA初心者です。 エクセルのマクロを組んでいるですが、サブルーチンの引数を配列にしたいのですが、どうすればよろしいでしょうか? 下記に例を示します。 呼び出し(Call)とサブルーチンの配列変数の記載方法がわかりません。 特に気になるのは、サブルーチンの配列に配列数(下記であれば10)を記入する必要があるのか? 必要な場合、元の配列数を変更した場合、どうすればミスなく、漏れなく修正できるか、良い方法はありまんせんか? (例) (呼び出し側) Dim AA(10) As Integer Call Test(AA)     ← 引数はAAでよい?それともAA() Sub Test(ByRef AA As Integer) ← AA or AA() or AA(10) ? AA(3) = AA(2) + AA(1) 以上、お手数をおかけしますが、よろしくお願いします。

  • 変数の受け渡しについて

    MS-DOSのBATファイル内に「VBで作成したEXEファイルをCALLする」記述を 追記しようと思っています。 全体の流れは、BATファイルの処理中に使用している変数をEXEファイルに引き渡し、 EXEファイルは受け取った変数の条件分岐処理をし、その結果を再びBATファイルに 返すことです。 教えていただきたい内容は、変数を受け取る際および引き渡す際の記述の仕方についてです。 ちなみにEXEファイルの処理内容は、受け取った変数(日付:YYMMDD書式)のMMの箇所が 「01~03」の場合はAを、「04~09」の場合はB、「10~12」の場合はCを 新しい変数としてBATファイルに返すことです。 どうかよろしくお願い致します。

  • equals() を使って、変数に入っている文字列を比較

    いつも大変お世話になっております。 下記のように、変数に入った値によって条件分岐をしたいのですが、 うまくいきません・・。 どのように書くべきでしょうか。  変数aaaに入っている値がnaninaniだったら”~~~”と処理したいのですが。 if(aaa.equals("naninani")){ ~~~省略~~~ } 何卒、初心者なので途方もない質問かもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Java