• 締切済み

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の各要素です。 上記のように「||」(論理和:または)でつないで書くのではなく、 もっとスマートに書きたいのですが、 何か良い方法はないでしょうか?? ご存じの方がいらっしゃいましたら、どうかご教示ください。 よろしくお願い致します。

みんなの回答

  • 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