2013-04-02 66 views
-1

我一直在使用創建的文件:閱讀在Perl新線

open OUT, ">$outfile"; 
print OUT "$file_in;$system_in;$symbol_in;$price_in\n"; 

後來試圖從這個文件讀取:

open DATAIN, "<", "$outfile" or die $!; 
while(<DATAIN>) 
{ 
    chomp($_); 
    my @ld = split(/\;/,$_); 
    my $system = $ld[1]; 
    my $file = $ld[0]; 
    ... 

    print "HELLOOO?$file\t$system\.."; 
} 

,但在第一次迭代中,它給了我這個錯誤:

Can't use an undefined value as an ARRAY reference 

的問題是真的是在\ n 與我創建的文件中的新線路,我想之後閱讀。

我試過用\ r,錯誤不存在,但是它全部讀爲一行。

請幫忙嗎?提前感謝!

全碼:

open OUT, ">$outfile"; 
print OUT "$file_in;$system_in;$symbol_in;$price_in\n"; 

open my $fh, "<", "$outfile" or die $!; 
while(<$fh>) 
{ 
    chomp; 

    my @ld = split(/\;/); 
    my $system = $ld[1]; 
    my $file = $ld[0]; 
    my $symbol = $ld[2]; 
my $price = $ld[3]; 

    my $key = $file . $symbol; 

    print "HELLOOO?$file\t$system\t$symbol\t$price\n" 
} 

錯誤:

Can't use an undefined value as an ARRAY reference at C:/Perl/lib/Math/BigInt/Calc.pm line 476, <fh> line1. 

的錯誤是,當它從文件中讀取行。如果在最初的文件中,我把/r而不是/n,我沒有得到這個錯誤,但是所有的文件都被讀作一行。

+0

你真的是指'while()'而不是'$ line'嗎?也就是說,'DATA'是一個特殊的文件句柄,通常保留用於'__DATA__'。 – toolic

+0

對不起,我粘貼了各種迭代中的錯誤代碼,但它不存在這個問題 – martini

+2

錯誤在'Math :: BigInt :: Calc'中?再一次,你沒有向我們展示所有的代碼。嘗試安裝'Carp :: Always'並運行你的程序作爲'perl -MCarp :: Always script_name ...'來獲得錯誤的完整堆棧跟蹤。 – mob

回答

1

您正在調用<>運算符不正確。

您不應該使用文件句柄DATA

你應該使用詞法文件句柄。

您不需要通過$_chompsplit。這就是爲什麼$_存在。

下面是你想要做到這一點。

open my $fh, '<', $outfile or die $!; 
while(<$fh>) { 
    chomp; 
    my @ld = split(/\;/); 
    ... 
} 
+0

不,它沒有工作。我再次得到錯誤:無法使用未定義的值作爲ARRAY參考 – martini

+2

@martini您無法通過您發佈的代碼獲取該錯誤。檢查錯誤的行號,並確保在您發佈的代碼中包含該確切的行。 – TLP

+1

我不知道你的代碼適用於哪裏。您沒有向我們展示您的完整代碼。沒有看到所有的代碼和錯誤指向哪一行,我們都在猜測。我保證你最初發布的代碼是錯誤的。 –