如何使哈希键查找不区分大小写?

时间:2008-11-21 20:14:22

标签: perl hash

显然,哈希密钥以区分大小写的方式进行比较。

$ perl -e '%hash = ( FOO => 1 ); printf "%s\n", ( exists $hash{foo} ) ? "Yes" : "No";'
No

$ perl -e '%hash = ( FOO => 1 ); printf "%s\n", ( exists $hash{FOO} ) ? "Yes" : "No";'
Yes

是否有更改当前脚本的设置?

4 个答案:

答案 0 :(得分:17)

您必须使用绑定哈希。例如Hash::Case::Preserve

答案 1 :(得分:8)

字符串的散列和更改大小写的相同字符串不相等。因此,除非在创建它之前在每个哈希键上调用“uc”并且在使用它之前,否则无法执行所需的操作。

答案 2 :(得分:5)

my %hash = (FOO => 1);
my $key = 'fOo'; # or 'foo' for that matter

my %lookup = map {(lc $_, $hash{$_})} keys %hash;
printf "%s\n", ( exists $hash{(lc $key)} ) ? "Yes" : "No";

答案 3 :(得分:0)

如果你使模式匹配不区分大小写,那么

grep应该可以解决问题:

perl -e '%hash = ( FOO => 1 ); printf "%s\n", ( scalar(grep (/^foo$/i, keys %hash)) > 0) ? "Yes" : "No";'

如果您有多个具有各种拼写的密钥,您可能需要检查匹配是否大于1。