• 締切済み

PerlでIF文の条件式をもっとスマートに書きたい

PerlでIF文の条件式をもっとスマートに書きたいのですが。。。 以下のようなIF文の条件式を上手く書く方法がありますでしょうか? if($flg[0] == 1 || $flg[1] == 1 || $flg[2] == 1 || $flg[3] == 1 || $flg[4] == 1 || $flg[5] == 1 || $flg[6] == 1 || $flg[7] == 1 || $flg[8] == 1 || $flg[9] == 1)){ $flg[i]は配列@flgの各要素です。 上記のように「||」(論理和:または)でつないで書くのではなく、 もっとスマートに書きたいのですが、 何か良い方法はないでしょうか?? ご存じの方がいらっしゃいましたら、どうかご教示ください。 よろしくお願い致します。

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

みんなの回答

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

新しい (5.10.1 以降の) Perl なら if (1 ~~ @flg[0..9]) でよかったりする.

参考URL:
http://perldoc.perl.org/perlop.html#Smartmatch-Operator
  • shiren2
  • ベストアンサー率47% (139/295)
回答No.2

ちょっと呪文っぽいですが、こんなですかね。 配列のスライスとgrepを使ってます。 if(grep{ $_ == 1 } @flg[0 .. 9]){

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

まず、思いつくのは grep を使う方法ですね。 http://www.ibm.com/developerworks/jp/linux/library/l-perl1/#e if ((grep { $_ == 1 } @flg) > 0) { # 何らかの処理 } @flg の要素が0か1だけなのであれば、↓の様な方法も有るかと。 if ((join '', @flg) > 0) { # 何らかの処理 }

関連するQ&A

  • perl のif文(条件式)内に代入式は使えない?

    例えば、$a =1 という代入式を、if 文の条件式として、( $a = 1){ } とするとエラーが出ますが、代入式はif文の条件式として使えないのですか?

    • ベストアンサー
    • Perl
  • PerlのIF文について

    PerlのIF文の判断式につきまして、式全体を変数にしたいのですが、うまくできません。 初歩的な質問で大変恐縮ですが、他の言語を使っている人に聞いてもできるということなので、Perlでもできるような気がするのですが、うまく動かないので教えていただけませんでしょうか。 $ifbun="index(文字列, 検索したい単語) >=0"; if($ifbun){  処理 } とっても簡単な式なのですが、このままですと条件式を加味しない処理結果になっています。 $ifbunの中身をそのままIFの条件式に入れると問題なく条件式どおりの結果が得られるので、プログラムは間違っていないと思うのですが、変数に入れると、条件を加味していない結果が出てきます。 どなたかお分かりの方がいらっしゃいましたら教えてください。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • if文条件式で配列を使用したい

    if文条件式で配列を使用したい 例えば open (FH, "<data.dat"); @list = <FH>; で不確定要素数を@listに格納したあと if文でその@list内でマッチングする物があればそれだけ表示させたいのですが #ここでは比較対象をabcとして foreach(@list){ if( abc eq @list){ } } としてもtrue処理が出来ません。 どの用に条件を書けばよいのでしょうか?

    • ベストアンサー
    • Perl
  • perlのif文(条件の指定方法)につきまして

    おそらく単純な事だと思われますが、 不慣れなものでお付き合いいただけますとありがたいです。 if( $hoge == $testdata){ # 条件が一致した場合の処理 } $hoge には、2 が入っています。(文字列) $testdata には、2,6,10 が入っています。(文字列) 1対1であれば、上記の記述でいけるのですが、 カンマ区切りの復数の値と一致判定する方法がわかりません。 まず、配列にして my @testdata_hairetu = split(/,/, $testdata); などやってみましたが、 その後の条件文との絡みなどで詰まっています。 復数値がある場合に一つ一つ照合(判定)していく方法をご教授いただけないでしょうか。 foreachの内部でifとかかなと調べ中です。 perlは記述方法がいろいろあるようなのですが、できれば短さよりもわかり易い方が有難いです。 どうぞよろしくお願いします。

  • if [ 条件式 ]とif[[ 条件式 ]]

    シェルスクリプトでのif [ 条件式 ] と if [[ 条件式 ]] の違いについて教えてください。 以下のシェルスクリプトを実行すると、 意図したとおり、111 と出力されます。 =========▼▼(ここから)▼▼========= #!/bin/sh AAA=yes if [[ "$AAA" = [yY]* ]] then echo 111 else echo 222 fi =========▲▲(ここまで)▲▲========= 上記、スクリプト3行目の if [[ "$AAA" = [yY]* ]] の部分を if [ "$AAA" = [yY]* ] というように、角カッコ 1重にすると、 エラーは発生しませんが、 222と表示されます。 if [ 条件式 ] と if [[ 条件式 ]] の違いについて教えていただけないでしょうか。

  • if文の判定条件('||'と'&&'の使い方)

    ○if文の判定条件への理解が弱いため、下記プログラムを作成し、 疑問があったため、質問をしたいと思っております。 #include<stdio.h> #include<string.h> int main() { char moji[]= "A"; /***********************************************************/ if( 0 != strcmp( moji , "A" ) || strcmp( moji , "B" ) ) ^^(1) /***********************************************************/ { printf( "文字不一致" ); } else { printf( "文字一致" ); } return (0); } ○質問 「/*/」で囲ったif文の判定箇所になりますが、 この判定条件は"配列mojiに格納されている値が"A",または"B"以外の" ときに、画面上に「文字不一致」を出力します。そうでなければ 「文字一致」を出力します。 今回、配列mojiには"A"が格納されており、「文字一致」が画面に 出力されるはずですが、「文字不一致」が出力されてしまいます。 判定条件が誤っていると思い、色々と試したところ、(1)の箇所を 「&&」にしたときに、「文字不一致」が出力されます。 「||」(論理和)と「&&」(論理積)が理解できていないと思われ、 この部分を交えて、何故「&&」にしないと「画面不一致」と出力 されないのかを、ご教授の程お願い致します。

  • [Perl]長すぎるif文を簡単にしたい

    初めまして、説明がうまく伝わらないかもしれませんがよろしくお願いいたします。 同じ値がN回続いた場合、その値をすべて出力するPerlのプログラムを作成中なのですが とても長くなってしまい、スッキリとしたプログラムにしたいのです。 どうかお知恵を貸していただけないでしょうか。 現在、&&を使用してこのようになっています。 例:Aの値が5回連続して同じ値だった場合 for($i=1; $i<=1000; $i++){  if(@A[$i]==@A[$i+1] && @A[$i+1]==@A[$i+2] && @A[$i+2]==@A[$i+3] && @A[$i+3]==@A[$i+4]){   for($j=0; $j<=9; $j++){    printf "@A[$i+$j], @B[$i+$j], @C[$i+$j]";   }  } } データはすべて数値で、スペース区切りのテキストデータです。 # ヘッダー 0.00 2.0 11.5 0.01 6.3 17.2 0.01 2.1 14.2 0.01 1.2 14.3 0.01 2.1 14.3 0.01 3.7 14.3 0.01 3.7 14.3 0.01 4.1 14.3 0.06 4.1 14.3 0.01 4.1 14.9 0.01 4.1 14.9 0.03 4.1 14.8 ・・・ 連続した値が50回、100回だった場合になるとif文の条件式が長くなってしまい その都度変更がとても大変になってしまい困っています。 どうか、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • php if文の条件式の書き方

    同じ変数に対する条件式ってまとめて書けないのでしょうか? if($hensu!=1 && $hensu!=20 && $hensu!=30){ ~~~~~ } みたいな条件が書きたい時に $hensu!=1 && 20 && 30 みたいな書き方はできないのでしょうか?上記の書き方ではダメですが。 なにか上の書き方よりスマートに書ける方法があれば教えて頂けないでしょうか。

    • ベストアンサー
    • PHP
  • 条件式IF文を教えてほしいです。

    =IF(E16=E15,"〃",E16) 上記の条件式に、E15が空白ならE16も空白という条件式を追加していただけませんか? E15にデータがあったなら、空白でないなら、空白なら、どのような形になるのかわかりませんが、変更をお願いします!

  • if文の条件式について

    iPhone OS 3.0、Xcode 3.1.3という環境でobjective-cをベースとしてiPhone向けアプリケーションを作る研究をしています。 どちらかというとC言語の質問になりますが、if文で使う条件式にNSString型で宣言した文字列を使うにはどうすればいでしょうか? NSString *startArea = [[NSString alloc] initWithFormat:@"pt.x > 224 && pt.y < 100"]; というコードでstartAreaに代入されたpt.x > 224 && pt.y < 100という文字列をif文の条件式として使えればと思ってます。 ちなみに、、、 if( startArea ){ 実行したい命令 } という記述をしたところ、ビルドエラーは発生しませんでしたが条件が無視されてしまいました。 他にコードの間違いがあるかもしれませんが、まずはこの内容で判断をお願いします。