2013-05-08 107 views
1

我在perl中遇到了文件讀取問題。打開的文件只讀取一行

有一個以下來源:

use strict; 
use warnings; 

sub main() 
{ 
    my @lines = file_read("test.c") or die; 
    file_print(@lines); 
} 

sub file_read 
{ 
    my $filename = shift; 
    my @lines; 

    open(FILE, "<", $filename) or die $!; 
    @lines = <FILE>; 
    return @lines; 
} 

sub file_print 
{ 
    my @lines = shift(); 

    print("Total lines " . scalar(@lines) . "\n"); 

    foreach my $line (@lines) 
    { 
      print($line); 
    } 
} 

與以下文件:

/****************************************************************************** 

*                    * 

*                    * 

輸出是:

Total lines 1 
/****************************************************************************** 

這裏有什麼問題?

我可以假設的唯一的東西,它讀取文件,直到0x0A 0x0AASCII符號組合。

+2

更換sub file_print{...}看看'文件:: Slurp'(見http://stackoverflow.com/a/206682/180100) – 2013-05-08 11:13:27

回答

4

顯示的代碼不是完整或正確的Perl程序,沒有顯示任何實際的調用main。此外,序列

my @lines; 
open(FILE, "<", $filename) or die $!; 
file_print(@lines); 
@lines = <FILE>; 

嘗試在讀取它們之前打印這些行。

我認爲只有一行似乎已被閱讀的原因是在語句my @lines = shift();。這並沒有得到整個數組,只有它的第一個元素。試着用

sub file_print 
{ 
    print("Total lines " . scalar(@_) . "\n"); 

    foreach my $line (@_) 
    { 
      print($line); 
    } 
} 
+0

謝謝!我不知道我怎麼能錯過它。 – Alex 2013-05-08 11:35:20

+0

'print @ _'實際上和你的foreach循環完全一樣。 – TLP 2013-05-08 11:38:23

0

你或許應該在子程序傳遞一個數組引用的子程序file_print

file_print(\@lines); 

然後:

$lines = shift; 
@lines = @$lines; 

這將做的工作。