2015-10-07 31 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