perlで、複数の値に対して変数をテストする最良の方法は何ですか?
このようなもの(疑似コード):
if x is in {'q','w','e','r','t'}
# do something
perlで、複数の値に対して変数をテストする最良の方法は何ですか?
このようなもの(疑似コード):
if x is in {'q','w','e','r','t'}
# do something
これは、「新しい」 スマートマッチ演算子を使用できる目的です。
#!/usr/bin/env perl
use strict;
use warnings;
use 5.10.0;
my $thing = 'bar';
my @set = qw(foo bar baz);
say 'ok!' if $thing ~~ @set;
出力:
ok!
注:これは、perlの古いバージョンでは使用できません。5.10より前grep
では、他の回答と同じように使用するか、セットが非常に大きい場合は、最初の一致後にリスト全体を反復処理しないためfirst
、List::Utilを使用します。
どうですか:
if (grep /^x$/, ('q', 'w','e','r','t')) {
# Do something
}
これは、比較する値がスカラー (文字列または数値) である場合に機能します。
文字列の場合、便利な省略形があります。
if (grep /^x$/, qw(q w e r t y)) {
# Do something
}
/^x$/
正規表現表記 ( )が気に入らない場合は、次の方法があります。
grep {$_ eq 'x'} qw(qwerty)
$_
平等だけでなく、あらゆることをテストするために使用できる場所。
やりたいことが単純な場合 (一行で表現できる場合) は、次のようにします。
do_something if grep /^x$/, qw(q w e r t y)