• ベストアンサー

eval関数?エラーについて

eval関数?エラーについて 掲示板の設置と設定時に各項目について必須や任意に設定できますが必須項目に無入力で投稿するとeval関数?エラーが表示されるのですが、この仕組みについて知りたいです。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

その掲示板の作りかたによるものなので、一般的な「仕組み」では無いです。 eval関数そのものについては、引数で渡された文字列をPerlのスクリプトだと解釈して「実行」するものです。 例えば $s='$a = 1;'; $a=0; eval $s ; print $a; とすると、eval $s では $a=1; が実行されて、printでは 1 と表示されます。 おそらく、その掲示板のプログラムでは、必須項目に書いた内容を加工してプログラム状にし、evalで実行して使っているのでしょう。それが空欄だと、文法かなんかで正しくないプログラムになり、evalで実行できない、ということなのでしょう。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.1

eval関数は、CPAN辺りで拾ってきたモジュールが、その内部で勝手にexit()してしまって、 exit()されては困る担当者が、大変困ったとき、exit()関数のエラーコードを戻して貰って、自分が書いたPerlコード内で、エラー処理をするための関数ですね。 eval関数の引数には、問題がある関数とその引数を記述します。 eval関数のコーディングの仕方の善し悪しは、具体的に示されないと判断出ませんね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 任意の数だけテキストボックスを表示したい。(Eval関数使用)

    はじめまして、宜しくお願いします。 Access2002とSQLサーバーをつかってタイトルに書いたようなことを やろうと思っています。 やっていることは まずテキストコントロールを5個(名前:text1~text5)用意して、それらを全て 非表示(.visible = false)にしておきます。 その後「任意の数」をDBからとって来て、その数だけテキストボックスを 表示させたいと思っています。 任意の数が「3」のときはテキストボックスを3つだけ表示させ、任意の数が「5」 のときはテキストボックスを5つ表示したいと思っています。 eval関数を見つけたのでそれを使って下記のように記述しましたが evalがコントロール名の「text」を認識してくれず、エラーとなってしまいます。 ヘルプを見てみると、 eval関数は、 「評価しようとする変数の中でさらに変数を使っている場合、そこまで評価できない」 というようなことは書いてあったのですが、 この場合コントロール名なのでなぜ認識してくれないのか分からず、 行き詰っております。 それとも、このような処理はできないのでしょうか。 Dim CNT AS Integer:CNT = 0 Dim a AS String Do While cnt < 任意の数    CNT = CNT + 1    a = "text" & CNT & ".Visible = True"    Eval (a) Loop 基本的なことで間違えているのかもしれませんが、 お気づきの方が居られましたらご教授ください。 宜しくお願いします。

  • Eval関数を使いたい!ドキュメントにある宣言とはなに?

    Eval関数を使いたい!ドキュメントにある宣言とはなに? DataBinder.Eval メソッド にある DataBinder.Eval (Object, String, String) 実行時にデータ バインディング式を評価し、 結果を要求側のブラウザに表示されるテキストとして書式化します。 を使いたいです。 Visual Studio 2005のドキュメントで見つけました。 ドキュメントにある宣言とはなんですか? Visual Basic (宣言) Public Shared Function Eval ( _ container As Object, _ expression As String, _ format As String _ ) As String Visual Basic (使用法) Dim container As Object Dim expression As String Dim format As String Dim returnValue As String returnValue = DataBinder.Eval(container, expression, format) 宣言と使用方法が載っていましたが、使い方がわかりません・・・ ~~~~~~~~~~~~~~~~~~~~~~ 以下を書くと「名前'Eval'は宣言されていません」とエラーが出ます。 宣言がわかっていないので、当たり前といえば、当たり前です。 Dim myWork As String = "1+2+3+4" Dim myTotal As String = "" myTotal = Eval("myWork") これが使えるようにするにはどうしたらいいか教えてください!

  • メッセージを表示する関数の引数について

    はじめましてよろしくお願いします。 現在、Access2002でメッセージを表示する関数を作成していますが、 引数を増やしたらどうしてもコンパイルが通らず困っています。 やっていることは標準モジュールに Public Sub ExcMsgBox(MSG As String, Title As String)   MsgBox MSG, vbOKOnly + vbExclamation, Title End Sub という関数をつくってフォームから ExcMsgBox ("入力必須項目が全て入力済でないため、" & _       vbCrLf & "編集内容を保存できません。","入力必須項目") という形で呼び出していますが、 これだと「コンパイルエラー、修正候補 =」と出ます。 SUBで関数宣言しているので、戻り値は無いはずなのですが TEST = ExcMsgBox ("入力必須項目が全て入力済でないため、" & _       vbCrLf & "編集内容を保存できません。","入力必須項目") とするとその場のコンパイルエラーは避けられるのですが、実際に実行すると やはり「コンパイルエラー Functionまたは変数が必要です」というエラーがでます。 関数を Public Sub ExcMsgBox(MSG As String)   MsgBox MSG, vbOKOnly + vbExclamation End Sub のように引数を一つ減らして、フォームから ExcMsgBox ("入力必須項目が全て入力済でないため、" & _       vbCrLf & "編集内容を保存できません。") のようにして呼ぶと正しくメッセージボックスが表示されるのですが。 基本的なことで何か勘違いしているかもしれませんが、何かお気づきの点が ありましたらご教授ください。よろしくお願いします。

  • 送信するとエラーになる

    先日画像投稿用の掲示板を設置しました。 この掲示板はネットにパスワードとか設定項目とかをアップして保存するタイプのものですが設定後に送信すると マイクロソフトのほうからエラーのメッセージが出ます。 インターネットエクスプローラーのエラーだと思うんですがいろいろアップデートもしてみても駄目でした。どうすればいいものかとここに頼ってしまいました。 PCにはあまり詳しくないのでその辺を考慮してよろしくお願いします。

  • evalの挙動について

    evalで特定のコントロールにフォーカスを当てれないでしょうか? asp と JavaScript を使って、ユーザが数値以外の値を入力した場合、エラーとしてそのコントロールにフォーカスを当てたいと思います。 Form の OnSubmit で以下の関数を呼び出します。 function CheckForm(){ nRoomCnt = <%=nRCnt%>; var ArrayRoomId = new Array(); <% for nCnt = 0 to nRoomCnt - 1 %> ArrayRoomId.push( <%=arrRoomId(nCnt)%> ); <% next %> for(var nCnt = 0; nCnt < nRoomCnt; nCnt++){ var s = "sCheck = document.form06.SelRoom" + ArrayRoomId[nCnt] + ".value;" ret = eval(s); //こちらは正しく評価されます。 alert(ret); if(isNaN(ret)){ s = "document.form06.SelRoom" + ArrayRoomId[nCnt] + ".SetFocus(); return false;"; ret = eval(s); // ここでエラーが発生し、次の画面に遷移してしまいます。 alert(s); alert(ret); return false; } } alert(ret); return true; どなたか詳しい方、ご教示いただけないでしょうか? よろしくお願いします。

  • INDIRECT関数 エラーになる

    Sheet1とSheet2があり、 Sheet1のA1には「tset」という値が入っています。 そこで、Sheet2の任意のセルに Sheet1のA1の値を入れたいのですが 「=Sheet1!A1」なら可能なのに Sheet2のA1に「Sheet1」と入力し Sheet2のA2に「=INDIRECT(A1)!A1」とするとエラーになります。 このような場合は、INDIRECT関数を使えばいいと知ったのですが 何が間違っていますか?

  • eval()を使わずに数値を取得し計算する方法

    ある数値計算をするプログラムを作っています そのプログラムではeval()を使っています 某書籍や色々javariptを勉強しているサイトを参考にさせていただいてますが そこではeval()はあんまり使うなとか、普通は使わないとか書かれていました 多用すると動作が重くなるとか、危険だから何とか… しかし、自分が作成しているプログラムではevalがどうしても必要となってしまいます 簡単なプログラム例です function tas(){ gk=0 ~~~~省略~~~~ gk=eval(a.value)+eval(b.value); aとbに数字を入力して足し算の答えをを出力するプログラムの一部です (この時、答えの出力先はプログラムを端折っていますが用意されています) a=1 b=2に入力したとして この時eval()を使わずa(b).valueのみにすると 答えが12と連なって表示されてしまいます ただこの理由は自分でも解っています そしてこれを数値として取得し計算させるためにはeval()が必要となってしまいます 現状、自分の知識と経験では… もしeval()を使わずに数値を取得し計算する方法があれば教えて下さい

  • evaluateを使ったユーザ定義関数でエラー

    個人用マクロブックの標準モジュールに Function Eval(str As String) As Single Eval = Evaluate(str) Application.Volatile End Function と記入し、文字列を数式に変換する関数Eval()を定義しました。 それを使用して、B7に入力された値によって、計算式を振り分ける数式を =PERSONAL.XLSB!Eval(VLOOKUP($B7,$AQ$2:$BA$53,2,0)) とし、計算を振り分けていたのですが 振り分け先の式(vlookupで検索した式)が以下の式の時valueエラーになってしまいました。 IF(MONTH(Q1)=5,ROW(),COLUMN()) 尚 IF(MONTH(Q1)=5,,COLUMN()) IF(MONTH(Q1)=5,100,COLUMN()) IF(MONTH(Q1)=5,SUM(A1:A2),COLUMN()) としたときはエラーになりません IF(MONTH(Q1)=5,"100",COLUMN())はエラーになります。 何故エラーになるのか、修正方法はどうしたらいいのかわかりません。 ご存知の方いらっしゃいましたら、どうかご教授願います。

  • エクセル入力規則で関数を使ってエラーを表示させたい

    エクセル2003を使用しています。 入力規則の条件設定でユーザー設定を選び、関数を使用して、 E5のセルに「A」、もしくは、「B」で始まるデータを入力したときに、 エラーメッセージを表示させたいのですが、 うまくエラーメッセージを表示させることができません。 COUNTIF関数を使って =OR(COUNTIF(E5,"A*"),COUNTIF(E5,"B*")) と数式に入れてみたのですが、うまくいきませんでした。 どなたかご教示いただければありがたいです。よろしくお願いします。

  • テキストボックスに入力内容を反映させるには

    初歩でつまづいていると思うのですが、回答よろしくお願いします。 必須項目を入力する、登録画面を作っています。 必須項目につけた条件を満たさないと、テキストボックスの横にエラーメッセージが出る仕組みになっているのですが、必須項目を全て入力しないで登録ボタンを押したときに、途中まで入力したものも全て消えてエラーメッセージが出てしまいます。 必須項目を全て入力しないで登録ボタンを押したときは、途中まで入力したものをそのまま残して  エラーメッセージを出したいです。 どうすればよいのでしょうか?

    • ベストアンサー
    • PHP