2015-10-07 29 views
-1

在一个perl代码的散列值,我试图通过使密钥存储在2个独立的阵列&值来初始化散列。 要初始化数组,数据是从再进行处理的文本文件&读取。无法读取在Perl

我跟着以下语法存储密钥&值代入散列:

@hash {@key} = @值;

当我尝试显示散列的内容时,我能够单独显示键的内容&而不是值。为什么没有哈希值取任何值?这怎么解决?

文本文件

NAME,OWE,RECEIVE 
RAM,2000,1000 
TEJA,1500,2200 
NANDHINI,400,3000 
RAGHAV,0,5000 
ETHI,100,2500 
KESHAV,400,400 

以下是我的代码:

$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"; 
} 

输出中获得:

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 
+1

你没有访问%nameo哈希值,但(不确定)@nameo阵列。尝试$ nameo {$ key}而不是$ nameo [$ key]。 –

+3

把'使用警告;'和'使用严格的;'你写的每一个Perl程序的顶部。他们会帮助你处理这类案件。 –

回答

6

Perl不是PHP(也不是Ruby)。要访问的哈希值,使用大括号,不是方形的:

print $nameo{$key}; 

您应该使用strictwarnings。严格会告诉你,你试图访问其未声明@nameo