2012-12-05 17 views

回答

1

如何:

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) 
+0

只是x是我的變量,所以可能$ x – Gianluca

3

這就是"new"smart match operator可用於:

#!/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,如other answer,或者如果您的設置非常大,請使用first of List::Util,因爲它不會在第一次匹配後迭代整個列表。

+0

集合也可以使用散列建模:'my @vals = qw(foo bar baz);當事物在集合中時,我的%set = map {$ _ => 1} @vals;'then'$ set {$ thing}'是真實的。僅適用於字符串,但是是一個* O(1)*操作。非常適合頻繁(n> 1)訪問的大數據集。 – amon

+0

@amon是的,太好了。 :)但是,我使用了名稱* set *,只是因爲在問題元素中排序可能並不重要,因爲OP詢問了類似於'a B'操作的東西。 – memowe

+0

+1哇。感謝這個,很高興看到Perl5如何發展。最後,我在任何大型項目中都使用過Perl,當時它仍然是5.8.x - 我仍然愛Perl,但現在主要是替代我的'sed' /'awk'。 – Faiz

相關問題