0

誰かが私がどこが間違っているのか教えてもらえますか?私はそれを理解することができません....基本的に私のコードがしようとしているのは、ファイルを読み取り、各ファイルのハッシュを作成することです。これらのハッシュはハッシュ上に編成されています。ユーザーは2つのパラメーターを入力します。1つは外側のハッシュのキーで、もう1つは内側のパラメーター用です。私が入力したのは都市とPITです。分解する行の前に書いたパラメータと同じです。

何千回も試しましたが、次のエラーが発生し続けます。コードでその行をコメント化したHASH参照として未定義の値を使用することはできません。2つのファイルはcitys.txtです。school.txt。それらの内容は次のとおりです。PIT\tPittsburghNY \ 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);
4

1 に答える 1

4

$par1問題は、とを読み込んだときに$par2、最後に改行が含まれていることです。"city\n"したがって、と同じではない、のようなハッシュキーを探すことになります"city"

chompのような入力パラメータで使用するようにしてくださいchomp($par1)。それはそれの世話をする必要があります。

于 2013-02-01T10:35:55.770 に答える