0

perlで、複数の値に対して変数をテストする最良の方法は何ですか?

このようなもの(疑似コード):

if x is in {'q','w','e','r','t'}
  # do something
4

2 に答える 2

3

これは、「新しい」 スマートマッチ演算子を使用できる目的です。

#!/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を使用します。

于 2012-12-05T09:27:05.863 に答える
2

どうですか:

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)
于 2012-12-05T09:15:47.190 に答える