无法读取perl中的hash值

vim*_*vim -1 perl hash

在perl代码中,我尝试通过将键和值存储在2个单独的数组中来初始化哈希.要初始化数组,从文本文件中读取数据然后进行处理.

我按照以下语法将键和值存储到哈希中:

@hash {@key} = @值;

当我尝试显示哈希的内容时,我能够单独显示密钥的内容而不显示值.为什么哈希没有采用任何值?怎么解决这个问题?

文本文件

NAME,OWE,RECEIVE
RAM,2000,1000
TEJA,1500,2200
NANDHINI,400,3000
RAGHAV,0,5000
ETHI,100,2500
KESHAV,400,400
Run Code Online (Sandbox Code Playgroud)

以下是我的代码:

$i = 0;
open(FH, "<expenses_details.txt") or die "Couldn't open the file";
%nameo;
while ($line = <FH>)
{
    chomp($line);
    if ($i == 0)
    {
        $i++;
        next;
    }
    ($name, $owe, $receive) = split(',', $line);
    #print "Name is:$name, Owe:$owe, Receive:$receive \n"; 
    push(@names, $name); # Creating name array
    push(@owes, $owe);  #creating owe array
    push(@receives, $receive); #creating receive array
}
close FH;
print "Name array:\n";
foreach (@names)
{
    print "$_\n";
}
print "\nOWE array:\n";
foreach (@owes)
{
    print "$_\n";
}
#Initialising owe hash
@nameo{@names} = @owes;
$size = keys %nameo;
print "\nsize is $size\n";

foreach my $key (keys %nameo)
{
    print $key;
    print $nameo[$key];
    print "\n";
}
Run Code Online (Sandbox Code Playgroud)

获得的输出:

Name array:
RAM
TEJA
NANDHINI
RAGHAV
ETHI
KESHAV

OWE array:
2000
1500
400
0
100
400

size is 6
TEJA
RAM
KESHAV
ETHI
NANDHINI
RAGHAV
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 6

Perl不是PHP(也不是Ruby).要访问哈希值,请使用花括号,而不是方括号:

print $nameo{$key};
Run Code Online (Sandbox Code Playgroud)

你应该使用严格警告.严格会告诉你你试图访问@nameo哪些未声明.