1

次のスクリプトを使用してユーザーと対話しながら、ハッシュのリストを生成しようとしています。

use strict;
use warnings;

my $KEY_1 = "one";
my $KEY_2 = "two";


sub generateHash{
    my ($value1, $value2) = (@_);

    $value2 = $value1 + 5.0;

    my %hash = {};

    $hash{$KEY_1} = $value1;
    $hash{$KEY_2} = $value2;

    return %hash;
}

print "Num: \n";
my $number = <>;

my @hashes = ();
my %new_hash = {};

for ( my $i = 1; $i < $number + 1; $i = $i + 1 ) {

    print "Enter the values  $i \n";

    print "value 1: ";
    my $value1= <>;

    print "\nvalue 2: ";
    my $value2= <>;

    chomp $value1;
    chomp $value2;

    %new_hash = generateHash($value1, $value2);     

    push (@hashes, %new_hash);
    print "@hashes\n";
}

my %test = $hashes[0];
my @keys = keys %test;
my @values = values %test;

print "@keys\n";
print "@values\n";

プログラムを実行しようとすると、配列内のハッシュにアクセスするときに参照の使用に関連するエラーが発生します。何かが欠けていますが、何がわかりません。ハッシュの参照にどこからアクセスしているのだろうか。事前に感謝します。実行からの出力が添付されています。

Num: 
1
Reference found where even-sized list expected at generate_hashes.pl line 21, <> line 1.
Enter the values  1 
value 1: 1

value 2: 1
Reference found where even-sized list expected at generate_hashes.pl line 12, <> line 3.
Use of uninitialized value $hashes[1] in join or string at generate_hashes.pl line 32, <> line 3.
HASH(0x2587a88)  one 1 two 6
Odd number of elements in hash assignment at generate_hashes.pl line 34, <> line 3.
HASH(0x2587a88)
Use of uninitialized value $values[0] in join or string at generate_hashes.pl line 38, <> line 3.
4

1 に答える 1