【问题标题】:Open file reads only one line打开文件只读取一行
【发布时间】:2013-05-02 14:12:20
【问题描述】:

我在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 0x0A ASCII 符号组合。

【问题讨论】:

标签: perl file


【解决方案1】:

显示的代码不是完整或正确的 Perl 程序,没有显示实际调用 main。还有顺序

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

在阅读之前尝试打印这些行。

我认为似乎只读取了一行的原因是在声明 my @lines = shift(); 中。这没有得到整个数组,只有它的第一个元素。尝试用

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

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

【讨论】:

  • 谢谢!我不知道我怎么会错过它。
  • print @_ 实际上与您的 foreach 循环完全相同。
【解决方案2】:

您可能应该为子例程file_print 传递一个数组引用

file_print(\@lines);

然后在子程序中:

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

这样就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多