• ベストアンサー

perlのことで質問

(1)現在、下記のようになっています。 <select name="xxx">  <option value="1">1</option>  <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> 1~4までなら別によいのですが、1~99にしたい場合、全部は書いていられません。 ループ処理を使って簡単に記述するのはどのようにしたらよいでしょうか? (2)変数$aが数値であるかどうかを調べる関数、または方法をご教授下さい。 (3)変数$aを数値化する関数、または方法をご教授ください。

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

  • ベストアンサー
  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.6

こういう for の使い方もあります 文字列そのものに " がたくさん含まれるようなときは qq を 使う手もあります. use strict; use warnings; my $start = 1; my $end = 100; my $checked = 50; print qq{<select name="xxx">\n}; for ($start .. $end) { if ($_ == $checked) { print qq{<option value="$_" checked>$_</option>\n}; next;} print qq{<option value="$_">$_</option>\n}; } print qq{</select>};

skyresort
質問者

お礼

ご回答ありがとうございます。 新たにお聞きしたいのですが、(1)checkedとは何でしょうか?(2)qqとは何でしょうか?

その他の回答 (8)

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.9

わお,同じくやってしまいました(^^;; okok_toneさん,leap_dayさん,どうもです. 本題 >(2)qqとは何でしょうか? 少しはぐぐって欲しいのですが・・・ qq は " で囲むのと「ほとんど同じです」 double quotationだから qq なのでしょう つまり, "hogehoge $hoge hoge" と qq(hogehoge $hoge hoge) は同じです. #( ) でなくてもいいんだけども。。。 ただし,qq の場合は," を \" にしないでいいので " が出てくるHTMLのようなものでは便利なのです.

skyresort
質問者

お礼

なるほど。ご回答ありがとうございます。 遅くなり申し訳ございません。

  • leap_day
  • ベストアンサー率60% (338/561)
回答No.8

こんにちは perlで書くと人によってそれぞれですね~~(^^) こんな感じでもできます print "<select name='xx'>\n"; $i=1; for(1..99) { if($i eq "50"){ print "<option value='$i' selected>$i</option>\n"; } else { print "<option value='$i'>$i</option>\n"; } $i++; } print "</select>\n"; ちなみにjavascriptでも作ることは可能(^^) print <<"EOM"; <script language="javascript"> <!-- window.onload=function() { for (i=1; i<100; i++) { document.form.xx.options[i] = new Option(i,i); if(i == 50) { document.form.xx.options[i].selected = true; } } } //--> </script> <form name="form"> <select name="xx"></select> </form> EOM 同じく聞かれそうなので書いておくと『checked』はチェックボックスのときの初期設定で、『selected』はセレクトボックスでの初期設定になります(表示されたときに最初に選択されている場所です)

skyresort
質問者

お礼

ありがとうございます。 いろいろな記述を見て勉強し、また別の方法で記述することもできました。javaでも少し違う方法でもできました。 checked、selectedはそういう意味でしたか。とても参考になりました。

回答No.7

checkedは間違いでselectedです 以下のように変更してください ※kabaokabaさんの文章を引用 >my $checked = 50; my $selected = 50; >if ($_ == $checked) { >print qq{<option value="$_" checked>$_</option>\n}; if ($_ == $selected) { print qq{<option value="$_" selected>$_</option>\n}; 意味としてはHTML表示させるときに、50番目($selected)を強制的に選択されて表示させるために入れました (HTML構文をネットで見てください) 我ながら超初歩的な間違いをしてしまい、とてもはずかしい。。

skyresort
質問者

お礼

わざわざありがとうございました。 返信が遅くなり、申し訳ございませんでした。

回答No.5

my $start = 1; my $end = 100; my $checked = 50; print "<select name=\"xxx\">\n"; for(my $n = $start ; $n < $end ; $n++){ if($n eq $checked){ print "<option value=\"$n\" checked>$n</option>\n"; }else{ print "<option value=\"$n\">$n</option>\n"; } } print "</select>\n"; こんなもんか

skyresort
質問者

お礼

ご回答ありがとうございます。 そのまま記述したら出来ました。 新たにお聞きしたいのですが、checkedとは何でしょうか?

  • W_H
  • ベストアンサー率47% (21/44)
回答No.4

もしかして、ループが分からないでしょうか? 恥ずかしながら、ぼく自身中学生の時にループが分からず、一度perlを挫折しました。ループに関しては、書いて理解しましょう。そんなに難しくないですから。 一つ、一番楽なループを載せておきますので、数値を変えて実験して、ループを理解してください。 $nに数字が入り、1~5まで増える。 for($n=1;$n<=5;++$n){print "a $n a\n";} 後、分かりやすく日本語を交えてperlの関数を解説するホームページの、for文へのリンクを張っておきます。そちらも参考にしてください。 後、3)について。 perlは基本的にスカラー変数と言う、文字も数字もごちゃ混ぜで使用してもいいという変数なので、1と言う文字も、計算式に入れば数字の1になります。なので、C言語のようにintとかcharとかを厳密に気にする必要はないです。ただし、全角の数字が変数に入っていても、計算の場合無視されます。 $a="1";#文字としての1。全角の1にしてみると面白い print $1+2,"\n";#$aの中身を数字として計算

参考URL:
http://perl.misty.ne.jp/04.html#d
skyresort
質問者

お礼

ご回答ありがとうございます。とても参考になりました。 実は、perlを初めて、4時間ほどだったので・・・ ちなみに、全角の数字を数値として認識するにはどうすればよいのでしょうか。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.3

がると申します。 (1)については、for文を使えば問題なく出来るかと。  初歩の本の初手に書いてある程度の処理で可能だと思います。 (2)については、Perlであれば正規表現が一番楽ですね。 (3)ですが、特に何かほかに理由がなければ、私はよく $a = $a + 0; とか雑に処理しております(笑 Perlも、型はあまり厳密じゃない言語ですので。 以上何かの参考にでもなれば幸いです。

skyresort
質問者

お礼

ご回答ありがとうございます。 for文を使ったときに、よくcheckedというのがでてきていましたが、それがよくわからず、理解できませんでした;; perlでは、$a+0で数値と認識されるのですか。大変参考になりました。

noname#39970
noname#39970
回答No.2

>実際の記述を教えていただけると助かります まずは やってみたソースを載せて欲しい。 じゃないと「質問」じゃなく ただの「作成依頼」にしかならないし ヒントはNo1が ちゃんと出してる

skyresort
質問者

補足

すみません。なにぶん初心者なもので、やってみようにも全くわかりませんでした。いくつかloop処理の例文も見てみましたが、サイト等により異なったもので。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

(1) 各行に 2個ある数値を変数で置けば, 簡単にループで書けますよね? (2) 「数値」というのがどこまでを意味するかにもよるんだけど, 正規表現にマッチさせるのが安全かな. (3) これも実際には隠れた問題があるんだけど, 最も簡単なのは $a += 0;

skyresort
質問者

お礼

ご回答ありがとうございます。 初心者なもので、(1)について、実際の記述を教えていただけると助かります。

関連するQ&A