如何让Perl识别出大小写输入?

时间:2016-08-19 05:44:34

标签: perl

我目前正试图弄清楚如何使我的perl脚本接受字母的小写和大写变体。

例如。

my %channels = (a => 'test', b => 'test2', c => 'test3', d => 'test4', e => 'test5', f => 'test6', g => 'test7');

因此,当我想进入测试时,我可以做一个或A,它会接受它

总结问题:

当运行脚本时,我遇到了一个问题,你必须输入一个你想要的测试。这对我来说很好,但其他人想要选择做资本A.我试图让他们选择做任何一种。

全部谢谢

5 个答案:

答案 0 :(得分:2)

对于您的哈希键(单个字母作为键),请尝试使用逻辑定义的运算符。

  

// =>逻辑定义运算符。如果左侧是真,则在评估右侧时给出结果。

print $channels{$input} // $channels{lc($input)};

答案 1 :(得分:2)

一个简单的输入解决方案

print $channels{lc($input)};

如果输入为大写,则会转换为小写。不要担心小写字符。

答案 2 :(得分:1)

目前尚不完全清楚您的要求是什么,但从示例中看,您要求的是一个对密钥不区分大小写的哈希,即$hash{foo}$hash{FoO}等等都会导致相同的价值。

通过为哈希定义适当的FETCHSTOREDELETE方法,可以使用tied hashes实现此功能。并且已经实现了这样做,例如Hash::Case

当然,您也可以在访问哈希值之前简单地规范化所有键(小写,大写等)。

答案 3 :(得分:1)

我会将所有散列键保持为小写,并将输入值键转换为小写:

for my $inputKey ('a', 'A', 'b', 'B') {
    print $channels{lc($inputKey)}, "\n";
}

答案 4 :(得分:0)

使用regex它不会更短,但是另一种解决方法:

my %hash = {a => 'test', b => 'test2'};
my $read_input;

foreach my $key (keys %hash){
  if($key =~ /${read_input}/i){ #note the i for 'ignore case'
    print $hash{$key}; 
  }
}

您基本上遍历哈希的键并将它们与输入进行比较。如果找到了正确的值,则可以打印该值。

但是:您可以将每个输入转换为小写,然后访问哈希。