0
誰能告訴我我哪裏錯了?我無法弄清楚...... 基本上,我的代碼試圖做的是讀取文件併爲每個文件創建一個哈希,這些哈希被組織到哈希上。用戶可以輸入兩個參數,一個是外部散列鍵,另一個是內部散列鍵。 我輸入的是城市和PIT;與我在寫入行之前寫入的參數相同...我的散列碼散列有什麼問題?
我嘗試過數千次,我不斷收到此錯誤:無法使用未定義的值作爲HASH參考我已評論該行在代碼中。 這兩個文件是cities.txt; school.txt。 它們的內容都只是如下: PIT \ tPittsburgh NY \ tNewYork
#!/bin/perl -w
use strict;
use Data::Dumper;
our %hash_all =();
sub readHash{
my @vars = @_;
my $filename = $vars[0];
my %iptable =();
if(open(IN,$filename.".txt")) {
while(<IN>) {
my @tmp = split(/\t/);
$iptable{$tmp[0]} = $tmp[1];
}
}
return %iptable;
}
sub loadAll{
my %school = readHash("school");
my %city = readHash("cities");
$hash_all{school} = \%school;
$hash_all{city} = \%city;
print Dumper(\%hash_all);
}
sub queryValue{
my @pars = @_;
my $key1 = $pars[0];
my $key2 = $pars[1];
print "key1".$key1;
print "key2".$key2;
print Dumper(\%hash_all);
my %temp = %{$hash_all{"city"}};#THIS LINE WORKS
print $temp{"PIT"}; #THIS LINE WORKS
my %temp2 = %{$hash_all{$key1}};#THIS LINE HAS AN ERROR
print $temp2{$key2};
}
loadAll();
my $par1 = <>;
my $par2 = <>;
queryValue($par1,$par2);
錯誤是告訴你'$ key1'是未定義的。如果你做了一些反向追蹤,你可以看到'$ key1'來自'queryValue'的第一個參數,它是'$ par1'。這是你輸入的第一行,所以我懷疑你如何輸入你的程序輸入有問題。您可以與我們分享您的腳本執行代碼以及您的輸入文件嗎? – MattLBeck
@Mottrition:這不是錯誤消息所說的,因爲'$ key1'沒有被用作散列引用。問題在於'$ hash_all {$ key1}'是未定義的,所以'$ key1'的值很可能與'%hash_all'中的任何鍵不一致。 – Borodin
@Borodin Doh,我的錯! – MattLBeck