プロが教えるわが家の防犯対策術!

タイトルの通りです

if文などで長々と書くのが面倒なのですが何かいい方法はないのでしょうか?
以前はif($xxx =~ /^1$|^5$|^11$/)などと書いていたのですが、正規表現を使うと処理が遅いんですね

なるべく処理が軽くて簡潔な書き方がありましたら紹介してください

A 回答 (4件)

配列なりハッシュなりを使う... のかなぁ?

    • good
    • 0
この回答へのお礼

やっぱりそうなんですかね?
if文の条件式のなかではforやforeachが使えない(?)みたいなので今のところ確認できていませんでしたがおそらくそれが正解なのでしょうね
個人的にはif($xxx == ( 1 or 5 or 11))のようなことができれば最高だったんですが^^;
ハッシュはできるのかどうか確認していませんが記述が長くなりそうなので今のところ考えていません

ありがとうございました

お礼日時:2008/01/09 17:11

配列なら


my @array = (1, 5, 11);
if (grep {$_ == $xxx } @array) { ... }
とかかな. ハッシュなら
my %valid = ( 1 => 1, 5 => 1, 11 => 1 );
if ($valid{$xxx}) { ... }
のような感じ (「ハッシュを使った重複チェック」のバリエーション).
あ,
if ($xxx == (1 or 5 or 11)) { ... }
のような形は, (そのままじゃないけど) Perl6 でサポートされる予定になっています. いつのことかは知りませんが.
    • good
    • 0
この回答へのお礼

遅くなりました

そういえばgrepがありましたね
最近mapの方ばかり使っていたので存在を忘れていました
今のところ簡略な書き方はできないようなので、記述が長くなりそうならgrepで対応しようと思います

ありがとうございました

お礼日時:2008/01/10 13:23

モジュールを追加してもいいのなら。



use Perl::Junction qw(any);

my @nums = (1, 5, 11);

if ($xxx == any(@nums)) {
}

Perl6::Junction - Perl6 style Junction operators in Perl5. - search.cpan.org
http://search.cpan.org/~cfranks/Perl6-Junction-1 …

速度的にどうなのかは知らない。
    • good
    • 0
この回答へのお礼

プログラムを提供する相手方がデフォルトのままで、と言われましたのでモジュールを追加することはできないようです
初めに書いておくべきでしたね、すみません
Perl6からは上記の記述が使えるとのことなのでリリースが待ち遠しいです

ありがとうございました

お礼日時:2008/01/10 14:33

Perl 5.10.0では、switch文が新規導入されてます。



given ($foo) {
when (/^abc/) { $abc = 1; }
when (/^def/) { $def = 1; }
when (/^xyz/) { $xyz = 1; }
default { $nothing = 1; }
}
    • good
    • 0
この回答へのお礼

今までなんでないんだろうと思っていたswitch文が導入されていたんですね
...の前にそもそもperl5.10が出ていたことすら知りませんでした

ありがとうございました

お礼日時:2008/01/10 14:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!