【发布时间】:2013-02-01 18:35:55
【问题描述】:
谁能告诉我哪里错了?我想不通…… 基本上我的代码试图做的是读取文件并为每个文件创建一个散列,这些散列被组织成散列。用户会输入两个参数,一个是外层哈希的键,另一个是内层的。 我输入的是city和PIT;和我在断线前写的参数一样....
我尝试了数千次,我一直收到此错误:不能使用未定义的值作为 HASH 引用我已在代码中注释掉该行。 这两个文件是city.txt;学校.txt。 它们的内容如下: 坑\t匹兹堡 纽约\t纽约
#!/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。这是您输入的第一行,所以我怀疑您输入程序输入的方式有问题。您能否与我们分享您执行脚本的代码以及输入文件? -
@Mattrition:这不是错误消息所说的,因为
$key1没有被用作哈希引用。问题是$hash_all{$key1}是未定义的,所以$key1的值很可能与%hash_all的任何键都不对应。 -
@Borodin Doh,我的错!