打开的文件只读取一行

问题描述:

我在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://*.com/a/206682/180100) – 2013-05-08 11:13:27

显示的代码不是完整或正确的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

你或许应该在子程序传递一个数组引用的子程序file_print

file_print(\@lines); 

然后:

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

这将做的工作。