显然,哈希密钥以区分大小写的方式进行比较。
$ 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
是否有更改当前脚本的设置?
答案 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。