仅使用键创建哈希

时间:2014-06-12 04:18:29

标签: perl hash

只能在PERL哈希中推送密钥,我的意思是,可以创建没有相应值的哈希吗?

我想创建一个行为就像数组一样的散列,即只有键而不是相应值的散列。示例如下:

my %feedHash;
while(<CFG>)
{
    chomp($_);
    my @val=split(/:/,$_);
    chomp($val[0]);
    my $feedId=$val[0];
    if(!exists $feedHash{$feedId})
    {
      print "\n$feedId Feed is not present";
      $hash{$feedId} = undef;
      mkdir "LoadReports/$feedId" or die $!;                    
    }
    else
    {
       print '\nFeed is already present';
    }
}

它正在发出消息:&#34; Feed不存在&#34;即使是第二次循环中相同的Feed id

2 个答案:

答案 0 :(得分:5)

您可以使用密钥进行哈希,其中值设置为undef

my %hash;
@hash{qw(key1 key2 key3)} = ();

检查/设置特定的哈希键,

if (!exists $hash{key4}) { $hash{key4} = undef } 

答案 1 :(得分:2)

您实际上想要一个%seen样式哈希。

如果没有真正给哈希一个真正的布尔值,你实际上得到了额外的麻烦。因此,我建议您按照以下方式设置代码样式:

my %seen_feed;

while (<CFG>) {
    chomp;
    my ($id, @vals) = split ':';

    if (! $seen_feed{$id}++) {
        print "\n$id Feed is not present";
        mkdir "LoadReports/$id" or die $!;
    } else {
       print '\nFeed is already present';
    }
}