2014-06-12 120 views
3

只能將密鑰推入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'; 
    } 
} 

這是給消息:在循環「飼料不存在,」即使是同樣的飼料ID第二次

+0

只要使用'undef'的值:這將允許哈希(圖)來模擬設置相當不錯。 – user2864740

回答

5

您可以哈希與你的鑰匙,其中的值設置爲undef

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

檢查/特定哈希鍵設置,

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

正如我正在寫一個簡單的代碼,我想檢查密鑰是否存在散列。如果沒有,那麼只需在哈希中添加密鑰,就是這樣。 – user3732491

+0

請檢查我寫的代碼。 – user3732491

+0

@ user3732491'$ feedHash {$ feedId} = undef;'而不是'$ hash {$ feedId} = undef;' –

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'; 
    } 
} 
+0

是的,它工作。 – user3732491