检查字符串的最佳方法是Perl中的多个值之一? 我正处于一些Perl代码的中间,我发现自己正在编写下面一行代码的怪癖。Perl充满了各种各样的快捷方式,必须有比这更好的方法,对吗

检查字符串的最佳方法是Perl中的多个值之一? 我正处于一些Perl代码的中间,我发现自己正在编写下面一行代码的怪癖。Perl充满了各种各样的快捷方式,必须有比这更好的方法,对吗,perl,Perl,那么,有没有更好的方法来做到这一点: unless($config->{'case_transform'} eq 'NONE' || $config->{'case_transform'} eq 'UPPER' || $config->{'case_transform'} eq 'LOWER' || $config->{'case_transform'} eq 'CAPITAL' || $config->{'

那么,有没有更好的方法来做到这一点:

unless($config->{'case_transform'} eq 'NONE' || 
       $config->{'case_transform'} eq 'UPPER' ||
       $config->{'case_transform'} eq 'LOWER' ||
       $config->{'case_transform'} eq 'CAPITAL' ||
       $config->{'case_transform'} eq 'RANDOM')
{
    $config->{'case_transform'} = 'NONE';
}
还可以使用“”运算符
~

use 5.010;

$config->{'case_transform'} = 'NONE' 
    unless $config->{'case_transform'} ~~
        ( 'NONE', 'UPPER', 'LOWER', 'CAPITAL', 'RANDOM' );

正则表达式解决方案很容易扩展到输入包含前导/尾随空格的情况,或者扩展到不区分大小写的匹配。。。。现在您有两个问题:)如果您使用
map{$\u=>$\ u}
您可以用
$config->{case\u transform}=$good\u value{$config->{case\u transform}}|NONE}替换测试/赋值。至于这是否真的是一种进步,我将根据个人喜好来决定。
unless ($config->{'case_transform'} =~ /^(NONE|UPPER|LOWER|CAPITAL|RANDOM)$/)
{
  ...
}
$config->{'case_transform'} = 'NONE' unless $config->{'case_transform'} =~ /^(?:UPPER|LOWER|CAPITAL|RANDOM)$/;
use 5.010;

$config->{'case_transform'} = 'NONE' 
    unless $config->{'case_transform'} ~~
        ( 'NONE', 'UPPER', 'LOWER', 'CAPITAL', 'RANDOM' );