明らかに、ハッシュ キーは大文字と小文字を区別して比較されます。
$ 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
現在のスクリプトでそれを変更する設定はありますか?
結合されたハッシュを使用する必要があります。たとえばHash::Case::Preserve。
文字列のハッシュと大文字と小文字が変更された同じ文字列は等しくありません。したがって、ハッシュキーを作成する前と使用する前に、すべてのハッシュキーで「uc」を呼び出す以外は、やりたいことができません。
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";
grepパターンマッチで大文字と小文字を区別しないようにすると、うまくいくはずです:
perl -e '%hash = ( FOO => 1 );
printf "%s\n", ( scalar(grep (/^foo$/i, keys %hash)) > 0) ? "Yes" : "No";'
さまざまなスペルのキーが複数ある場合は、一致が 1 より大きいかどうかも確認する必要があります。