谁能告诉我哪里错了?我无法弄清楚...... 基本上我的代码试图做的是读取文件并为每个文件创建一个哈希值,这些哈希值被组织成哈希值。用户将输入两个参数,一个是外部哈希的键,另一个是内部的哈希。 我输入的是城市和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);
答案 0 :(得分:4)
您的问题可能是当您在$par1
和$par2
中阅读时,它们最后会包含换行符。因此,您最终会找到类似"city\n"
的哈希键,这与"city"
不同。
确保在输入参数上使用chomp
,例如chomp($par1)
。这应该照顾它。