2013-11-19 5 views
1

У меня проблема, когда я пытаюсь найти, существует ли запись в моем хеш-хеше, и если она не существует, Perl создайте мне эту запись. Exemple моего кода:Perl - Hash of Hash - проверка, если запись существует

use warnings; 
use strict; 

my %hash; 

$hash{'key1'}{'subkey1'} = "value1"; 

if (defined($hash{'key2'}{'subkey2'})) { 
    print "Here\n"; 
} 

print keys %hash; 

Этот код возврата:

key1key2 

Что является лучшим способом, чтобы поймать, если эта запись существует и DONT добавить это в Hash? Я попробовал с «существует» «определено», и это одно и то же.

Спасибо за вашу поддержку. И извините за мой английский.

+1

http://en.wikipedia.org/wiki/Autovivification – michael501

ответ

4

Вы должны сначала тест на key2, прежде чем вы можете проверить subkey2

if (defined($hash{'key2'}) && defined($hash{'key2'}{'subkey2'})) { 
    print "Here\n"; 
} 

В противном случае, Perl создает $hash{'key2'} для проверки на subkey2.

+2

Или просто запустите модуль [autovivification] (http://search.cpan.org/~vpit/autovivification/lib/autovivification.pm) и включите «нет автовивизации», прагмы. – Kenosis