10

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

$ 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

4 回答 4

17

您将不得不使用绑定哈希。例如Hash::Case::Preserve

于 2008-11-21T20:21:45.503 回答
8

一个字符串的哈希值和大小写改变的同一个字符串是不相等的。所以你不能做你想做的事,除了在创建之前和使用它之前在每个哈希键上调用“uc”。

于 2008-11-21T20:17:58.757 回答
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";
于 2010-05-22T04:51:56.403 回答
1

grep如果您使模式匹配不区分大小写,应该可以解决问题:

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

如果您有多个不同拼写的键,您可能需要检查匹配是否也大于 1。

于 2014-10-31T12:28:41.747 回答