Я думаю, что вы хотите grep
:
#!/usr/bin/env perl
use strict;
use warnings;
my %data = ( A => undef, B => 'yes', C => undef );
my @keys = grep { defined $data{$_} } keys %data;
print "Key: $_\n" for @keys;
Мне также кажется, что я печатаю слишком медленно и мне следует перезагрузить страницу, прежде чем публиковать ответы. Кстати, значение 0
или undef
может быть хорошим способом обработки значений null , но убедитесь, что вы помните, какое из них используете. Ложное значение и неопределенное значение - не одно и то же в Perl. Для пояснения: undef
возвращает false в булевом тесте, но также и 0
. Если 0
является допустимым значением, то вы хотите явно проверить на определенность, а не просто на истинность. (Я упоминаю об этом, потому что Джеймс пошел на 0
, а я пошел другим путем, и вы можете или не можете знать, если это имеет значение.)