2013-02-19 30 views
0

我已經接近讓我瘋狂了。當密鑰來自列表時,哈希值爲空

我有一個數組似乎沒問題。我的數組包含文件名(作爲鍵)和數組值的完整路徑。我檢查了它正在工作..到此爲止。這裏是我的代碼:

open (FILE, "comb_d.txt"); 
@l = <FILE>; 
foreach $line (@l) { 
    chomp($line); 
    my @linea = split(/separator/,$line); 
    $hash_d{$linea[0]} = $linea[1]; 
} 

就像我說的..它的作品,因爲我證實:

foreach my $llave (keys %hash_o) { 
    print "$llave = $hash_o{$llave}\n"; 
} 

,這讓我完全沒有哈希..問題

這裏談到的問題。我不想使用我陣列上的所有文件名(所有鍵),只是一組文件。實際上,存儲在@isect上的一組密鑰。但是,當我運行:

foreach my $llave (@isect) { 
    print "$llave = $hash_o{$llave}\n"; 
} 

我的結果是:

filename1 = 
filename2 = 

我敢肯定,在@isect元素爲%hash_o項存在。

請幫忙

謝謝!!

+1

你能不能從'comb_d.txt'和'@ isect'提供一些線? – Toto 2013-02-19 15:13:45

+0

'我@linea =拆分(/分離器/,$線);'你確定要'separator'而不是'$ separator'? – m0skit0 2013-02-19 15:16:18

+2

'%hash_o'和'%hash_d'有什麼區別? – mob 2013-02-19 15:23:29

回答

1

對於這樣的事情,Data::Dumper是你的朋友。

use Data::Dumper qw<Dumper>; 

... 

    $hash_d{$linea[0]} = $linea[1]; 
    say Dumper(\%hash_d); 
} 

再後來:

say Dumper(\@isect); 
say Dumper(\%hash_o); 

你花了很多時間在做什麼Data::Dumper確實爲小吃。在嘗試這樣做的每一次嘗試中,因爲它是Perl代碼,並且因爲您可能無法適應Perl的速度,所以您需要花時間調試代碼,而不是完成解決方案。

注:傾倒不是用於讀取對象的API,在面向對象的Perl可接受的替代品,如我解釋here。但特別是對於未散列的散列(請參閱bless或),它只是您想知道如何獲取的結構化數據 - 這是要走的路。

最後,這裏是我提到我最喜歡的工具是Smart::Comments。你這樣做的地方:

use Smart::Comments; 
... 
### %hash_d 
### @isect 
### %hash_o 

並觀看魔術。

相關問題