如何让Perl同时识别小写和大写输入?

如何让Perl同时识别小写和大写输入?,perl,Perl,我目前正试图弄清楚如何使我的perl脚本同时接受字母的小写和大写变体 比如说 my %channels = (a => 'test', b => 'test2', c => 'test3', d => 'test4', e => 'test5', f => 'test6', g => 'test7'); 所以当我想进入测试时,我可以做a或a,它会接受 总结一下问题: 在运行脚本时,我遇到了一个问题,如果需要测试,就必须输入一个。这对我来说很好,但其他人

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

比如说

my %channels = (a => 'test', b => 'test2', c => 'test3', d => 'test4', e => 'test5', f => 'test6', g => 'test7');
所以当我想进入测试时,我可以做a或a,它会接受

总结一下问题:

在运行脚本时,我遇到了一个问题,如果需要测试,就必须输入一个。这对我来说很好,但其他人希望选择做资本A。我试图给他们两种选择中的任何一种

感谢大家提供散列键(单个字母作为键),请尝试逻辑定义运算符

//=>逻辑定义运算符。如果左侧为真,则给出结果;如果右侧为真,则给出结果


不完全清楚您的要求是什么,但从示例来看,您要求的哈希值对键不区分大小写,即,
$hash{foo}
$hash{foo}
等都会产生相同的值

这可以通过为哈希定义适当的
FETCH
STORE
DELETE
方法来实现。现在已经有这样的实现了,比如


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

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

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

使用
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}; 
  }
}
基本上,您可以遍历散列的键,并将它们与输入进行比较。如果找到正确的,可以打印值


不过,您可以将每个输入转换为小写,然后访问散列

一个简单的解决方案供您输入

print $channels{lc($input)};

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

如果要比较,请使用/i表达式。这将导致不区分大小写的比较。我对perl很陌生,这到底是什么样子?如果(lc($value)eq lc(“Anon”))它基本上是将输入字符串和要比较的字符串转换为小写,并且无论输入什么,它都会接受它。同时检查下面其他人的回答。他们也指出了一些很好的例子。这一个。让代码中的键都是小写,然后在使用输入查找哈希中的键时将其小写。不需要太复杂。
print $channels{lc($input)};