• ベストアンサー

スイッチ文の利用について

Perl/CGIにてプログラミングを行っております。 ただいま条件分けにより処理を分けていく処理を作っているのですが、C言語でやったスイッチ文があれば便利だなと思っております。 しかし、Perlにはスイッチ文が無いようなのです。 手持ちの参考書を見ても載っておらず、諦めようかと思いましたが大量にならぶifとelsifをみてやはり思い直しました。 スイッチ文、もしくはそれに近いものってありますでしょうか? 理想としてはC言語のままの switch(式or変数){ case hoge: ... case hoge2: ... } のような形式を望んでおります。 何か有益な情報等ありましたらお知恵をお貸しください。

  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
回答No.3

Switchモジュールや5.10のgivenを使わない手としては既存の構文を利用した次のようなものがありま す。 SWITCH: { local $_ = "foo"; /^abc/ && do { $abc = 1; last SWITCH; }; /^def/ && do { $def = 1; last SWITCH; }; /^xyz/ && do { $xyz = 1; last SWITCH; }; # default print "$_はどのcaseにもマッチしませんでした\n" } C言語と同じくlastを使って抜け出す必要があるのがちょっとアレだと個人的に思いますが。 http://www2u.biglobe.ne.jp/~MAS/perl/waza/switch.html http://www.tech-web.net/perlmania/perlsyn3.html

WhiteWolf_
質問者

お礼

目からうろこです。 なるほど処理形式をうまく行えば既存のものですませられるのですね。

その他の回答 (2)

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

5.10 にして given~when/default で楽しんでください.

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

Switch と言う、モジュールがあるみたいです。

参考URL:
http://perldoc.jp/docs/modules/Switch-2.09/Switch.pod
WhiteWolf_
質問者

お礼

便利なモジュールがあるものですね。 利用させてもらいます!

関連するQ&A

  • switch-case文の「それ以外の処理」

    switch-case文で、それ以外の処理というラベルを使いますが、そのスペルは、「default」でしょうか「defalut」でしょうか? 嫌に自信ありげなホームページを見つけたのですが、私としてはK&R「プログラミング言語C」第1版で確認したところ、「default」でした。 英語の意味からしても、「default」だと思うのですが。 それとも、K&Rのどちらかが、スペルミスをしてそれが正式に採用されたとか、そういった逸話でもあるのでしょうか? まるで、O.K.のような!? ↓↓参考↓↓ http://www.ncos.co.jp/products/cgi-bin/e000.cgi?12

  • switch文での変数の扱い方について

    以前の質問ではお世話になりました。今回もよろしくお願いいたします。 今日C言語の授業で小数点で平均点を入力して、平均点と5段階評価(A, B, C, D, E)を表示するプログラムの作成を作りました。 その際評価の判定にはswitch文を使い、評価の条件は以下の通りです。 90以上をA 85以上89以下をB--------2 80以上85以下をC--------3 70以上79以下をD それ以外(69以下)をE 最初に先生より上記の条件で「switch文で完成できる」と言われたのがずっと頭に引っかかっていて、なんとかswitch文で作ろうと思いずっと悩んでいましたが、switch文のdefaultをなくして2段階に分かれている部分とEの評価の部分をif文で処理するか、 switch文ですべての点数(case 80: case 81: ... case 84:)を直接switch文で打つかの2つしか思いつきませんでした。 そこで皆さんにお聞きしたいのが、こういう問題の際に評価の処理をswitch文を中心に行いたい場合、みなさんでしたらどのように処理なされていらっしゃいますか? 今後のプログラミングの勉強としてぜひとも知りたいです。 どうかお願いいたします。

  • switch文について

    独学でjavaの勉強をしているのですが、switch文が本のとおりに入力しても エラーがでて困っています。どこが間違っているのかわかりません。 ちなみにプログラム内容は class bunki2{ public static void main(String args[]){ int a; a=1; switch (a) { case1:System.out.println("変数aの値は1です。"); break; case2:System.out.println("変数aの値は2です。"); break; case3:System.out.println("変数aの値は3です。"); break; } } } です。 これでコンパイルしようとすると’case’、’default’、または’}’がありません。とでます。 なぜできないのか教えてください。

    • ベストアンサー
    • Java
  • switch文を教えてください。

    以下のスイッチ文はcounterが特定の時にある値を代入する文ですが、 マッチした時全部同じ処理をしてしまいますよね。 case 50: の時だけ enemy[i].pattern=2; ではなく、 enemy[i].pattern=0; にしたいんです。 どうすればいいでしょうか。 やはりif文を使うしかないのでしょうか? これだけが実現できるとりあえずの処理ではなくて、これからドンドンcase文が増えていくものとして汎用性の高い書き方にしたいです。 switch(counter){   case 50:   case 350:   case 650:   case 950:   case 1250:   case 1550:   case 1850:   case 2150:     enemy[i].pattern=2; //どういう軌道を描くか     enemy[i].flag=1; //出現フラグを立てる     enemy[i].counter=0;//カウンター初期化         enemy[i].size=0.5f;//敵の大きさ     enemy[i].range=10.0f//範囲     enemy[i].x=210.0; //xの初期座標     enemy[i].y=-10.0; //yの初期座標     break;   default:     break; } どなたかよろしくお願いします><

  • switch の範囲指定

    switch文で以下のように書いた時に処理はCを実行するのですが、 変数a が 0~9の時に こうしますよ と範囲がまだ狭い時はこのように書いても処理はできると思いますが 変数a の範囲が 0~99だった場合、いちいちcase を100回書いて(defaultを使えば処理は減るだろうけど) と数字を100回書かないといけないのはとても面倒だと思うのです。 そこで以下のようにifを使わずにswitchを使って範囲を指定する方法はありませんか? //ifを使った場合の範囲指定 if( ( 0 <= a ) && ( a < 25 ) ){ //略 } else if( ( 25 <= a ) && ( a < 50 ) ){ //略 } else if( ( 50 <= a ) && ( a < 75 ) ){ //略 } else if( ( 75 <= a ) && ( a < 100 ) ){ //略 } //ソース int a = 6; switch( a ){   case 0: case 1:     //処理A     break;   case 2: case 3: case 4:     //処理B     break;   case 5: case 6:     //処理C     break;   case 7: case 8: case 9:     //処理D     break; }

  • switch文について

    VC++6.0 SDIです。 CString型の変数に、コンボボックスのデータを所得し、 選択したコンボボックスの内容に応じて異なった処理をさせたいのですが、どうしたら良いでしょうか? 私は、下記コードで出来るかな??ってイメージしていたのですが・・。 下記コードを改造してなんとか・・・ という拘り無く、コンボボックスの内容によって違う処理をする分岐の一般的な方法が知りたいと思っています。 よろしくお願い致します。 CString A; GetWindowText(A);  switch(A){  case '文字列1':{  処理  break;  }  case '文字列2':{  処理  break;  } ・ ・ ・  default :{  処理 break; } }

  • C言語のswitch case文で、scanfでキーボードから読み込ん

    C言語のswitch case文で、scanfでキーボードから読み込んだ1~12の値によって画面に季節を、3~5は"春"、6~8は"夏"・・・というふうに表示させるプログラムなのですが、if文を使わずにswitch caseで作るには case 3: case 4: case 5:puts("春"); break; ・ ・ ・ と1個1個記述するしかないのでしょうか? もし比較演算子と論理演算子を使って 3<= && <=5 こんな感じに1行にまとめることができるなら教えてください。

  • C言語switch文のcase記述について

    switch文のcaseがたくさんあるため、ソースファイルとして外だししたいと思っています。 ただ、switch文そのものはきちんと記述し、caseの部分だけを外だしできればと考えています。 例 switch (a) { case 1: case 2: : :(たくさん続く) 処理A; case 100; case 101; : : (これまたたくさん続く)  処理B; } を switch (a) { A_WO_SURU_JOUKEN  /* この記述を外だししたい */ 処理A; B_WO_SURU_JOUKEN /* 同じく */ 処理B; } といった具合にしてみたいということです。 ヘッダファイルを使う、defineでの記述で可能といったものを教えていただければ幸いです。

  • なぜ CGI は Perl 言語で作成/動く環境が多いのか。

    最近 CGI に興味をもちここで質問しながらネット検索をしました。 すると Perl 言語での CGI サンプルが一番多く C 言語で作る CGI の サンプルが少し見つかりました。 私の使っている無料サーバーでも CGI は使えますが Perl 言語だけ有効です。 セキュリティの問題で SSI と組み合わせた C 言語の CGI は実行出来ないようです。 質問内容: (1)なぜ CGI は Perl 言語が一番多いのか?→PHP、Cもあるのに (2)なぜ無料サーバーの多くが Perl 言語しか使えないのか? (3)処理の重い CGI を使うとサーバーがダウンするので使わないようにと  私の使っている無料サーバー(infoseek)でなっています。どの程度の  処理のことでしょうか? 上記の3つまたは1つでもアドバイスをして欲しいです。 回答をお待ちしています。

    • ベストアンサー
    • CGI
  • switch()文で値の大小比較

    例えば$numという変数の値が50以下の場合、 51以上80以下の場合、81以上の場合の処理と分けたい場合、 switch()文でif()のように値の大小比較をする事は出来ないのでしょうか? 以下のような比較を行いたいです。 (以下は例なので、if()で良いだろうという突っ込みは要りません) switch ($num) { case <= 50: 処理1 case <= 80: 処理2 default: 処理3 }

    • ベストアンサー
    • PHP

専門家に質問してみよう