比较Perl中的多个字符串

sun*_*dar 8 perl

我的代码是这样的:

if ( $var eq "str1" || $var eq "str2" || $var eq "str3" )
{
...
}
Run Code Online (Sandbox Code Playgroud)

反正有没有优化这个.我想要的东西:

if ( $var eq ["str1" || "str2" || "str3"] ) {...}
Run Code Online (Sandbox Code Playgroud)

Mar*_*tos 14

根据字符串的内容,正则表达式非常方便:

if ($var =~ /^(str1|str2|str3)$/) { … }
Run Code Online (Sandbox Code Playgroud)

如果做不到这一点,您可以查看列表:

if (grep { $var eq $_ } qw{str1 str2 str3}) { … }
Run Code Online (Sandbox Code Playgroud)

  • @ user988967,不,它没有.没有parens,它将匹配`str1A`,`Astr2A`和`Astr3`. (5认同)

Eug*_*ash 14

在Perl 5.10或更高版本中:

if ($var ~~ [qw( str1 str2 str3 )]) { ...} 
Run Code Online (Sandbox Code Playgroud)

~~运营商做了智能匹配它的参数之间.