Perl: Как проверить, было ли какое-либо значение (даже ноль) назначено хэш-ключу - PullRequest
3 голосов
/ 18 августа 2011

Существует ли правильный способ проверки, если определенному хеш-ключу уже присвоено какое-либо значение, даже если это значение равно нулю? Я работал с таким утверждением:

%hash=();
$hash{a}=1;
$hash{b}=0;
if($hash{$key}) { do something }

но это дает одинаковый результат для ключей, которые еще не были затронуты, и ключей, которым присвоено значение 0 (например, и $ hash {b}, и $ hash {c} оцениваются как 'false') Есть ли способ определить разницу между этими двумя?

Ответы [ 3 ]

9 голосов
/ 18 августа 2011

Используйте определенный оператор, чтобы проверить, имеет ли что-то значение, которое не undef

if ( defined $hash{ $key } ) {
  //do stuff
}

Используйте оператор существующие , чтобы проверить, записано ли $key из %hash в

if ( exists $hash{ $key } ) {
  //do stuff
}

Разница заключается в том, что defined проверяет, имеет ли значение что-то отличное от undef, а exists используется для проверки, является ли $key ключом хеш-функции, несмотря на его значение.

5 голосов
/ 18 августа 2011

См. perldoc -f defined и perldoc -f exists:

my %hash = (foo => 0, bar => undef);

print defined $hash{foo}; # true
print defined $hash{bar}; # false
print exists $hash{bar};  # true
print exists $hash{baz};  # false

delete $hash{bar};
print exists $hash{bar};  # false
0 голосов
/ 18 августа 2011

Вы можете использовать defined(), чтобы проверить, действительно ли ключ существует в хэше:

if (defined($hash{$key})) { do('something'); };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...