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 に答える