我的哈希代码哈希有什么问题?

时间:2013-02-01 10:12:17

标签: perl hash

谁能告诉我哪里错了?我无法弄清楚...... 基本上我的代码试图做的是读取文件并为每个文件创建一个哈希值,这些哈希值被组织成哈希值。用户将输入两个参数,一个是外部哈希的键,另一个是内部的哈希。 我输入的是城市和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);

1 个答案:

答案 0 :(得分:4)

您的问题可能是当您在$par1$par2中阅读时,它们最后会包含换行符。因此,您最终会找到类似"city\n"的哈希键,这与"city"不同。

确保在输入参数上使用chomp,例如chomp($par1)。这应该照顾它。