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

4

2 回答 2

4

显示的代码不是完整或正确的 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);
    }
}
于 2013-05-08T11:32:40.347 回答
0

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

file_print(\@lines);

然后在子程序中:

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

这将完成这项工作。

于 2013-05-08T11:24:10.757 回答