Какие абсурдные результаты вы получаете?Хэш не волнует, что у вас есть в ключах.Вы уверены, что у вас есть правильная вещь в $searchKey
?Если вы берете это из пользовательского ввода, есть ли дополнительный конец строки в конце?
Это работает так, как должно:
my %newhash;
my $key1="Dave 2314";
my $key2="John 3212";
$newhash{$key1} = 35;
$newhash{$key2} = 46;
print "Found\n" if exists $newhash{$key1};
Но есть другая проблема.Вы можете иметь код в фигурных скобках для простого доступа к элементу хеша.Когда у вас есть только скалярная переменная, это работает.Это синтаксическая ошибка, потому что есть простое слово Dave
, пробел и буквальное число 1234
:
print "Found\n" if exists $newhash{Dave 2314};
Это не синтаксическая ошибка, потому что есть функция с именем Dave
(это просто возвращает ключ, который существует).Я уверен, что это не ваша проблема:
sub Dave { 'John 3212' }
print "Found\n" if exists $newhash{Dave 2314};
Написано по-другому:
sub Dave { 'John 3212' }
print "Found\n" if exists $newhash{ Dave(2314) };
И еще по-другому:
print "Found\n" if exists $newhash{ join ' ', qw(John 3212 ) };
Вы должны иметьпроцитировал этот ключ, если он был буквальным:
print "Found\n" if exists $newhash{'Dave 2314'};
Вы можете иметь строки без кавычек, если они не похожи на код.Это выглядит как 'Dave'
:
print "Found\n" if exists $newhash{Dave};
Но как насчет этого?Эта точка на самом деле является оператором объединения строк, и она думает, что Dave
- пустое слово.Если вы не определили подпрограмму, это синтаксическая ошибка:
print "Found\n" if exists $newhash{Dave.John};
Это работает, хотя.Объект перед точкой - это вызов подпрограммы, а после - строка:
sub Dave { 'John 3212' }
print "Found\n" if exists $newhash{Dave.John};
Так что есть некоторые странные крайние случаи.Но у меня обычно нет этой проблемы, потому что я всегда цитирую буквальные ключи.