2011-07-15 41 views
1

這已在幾次之前問過,但這些答案似乎都不適用於我的情況。嘗試循環訪問Perl中的哈希數組錯誤

我的代碼:

open(FILE, "<", $fileb) or die "File not openable: $!"; 
while (<FILE>) { 
    $filebmeta[$line] = (data => $_, match => -1); 
    $line++; 
} 
close(FILE); 
$line = 0; 


for my $hashref (@filebmeta) { 
    print "$hashref->{data}\n"; 
} 

當我運行這段代碼就吐出:「不能使用字符串(‘-1’)作爲HASH裁判而‘嚴格裁判’在./partc使用第152行。'

任何想法爲什麼會發生這種情況?我似乎無法在循環中正確解引用散列。

+1

而不是'$ line'使用'$ .'。另外,'使用警告'將解決這個問題。 –

+1

或者使用'push'而不是使用'$ line'或'$ .'分配給一個帶編號的數組元素。 –

回答

7

數組的元素必須hashrefs,讓您的分配新建分配FY語句需要使用大括號:

$filebmeta[$line] = {data => $_, match => -1}; 

您的代碼分配列表的數組,所以它只是得到最後一個元素的列表這是-1。因此你的錯誤信息。

+0

完美,謝謝。 – Ash

4

您的表達(data => $_, match => -1)不會創建hashref,它會創建一個列表。你的意思可能是{data => $_, match => -1}

-1

你的意思是除了你的代碼中所有未定義的變量?閱讀perlreftut並注意語法。

+0

他們都被聲明,只是在我的代碼片段的範圍之外。 – Ash