打开的文件只读取一行
问题描述:
我在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程序,没有显示任何实际的调用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);
}
}
答
你或许应该在子程序传递一个数组引用的子程序file_print
file_print(\@lines);
然后:
$lines = shift;
@lines = @$lines;
这将做的工作。
更换
sub file_print{...}
看看'文件:: Slurp'(见http://*.com/a/206682/180100) – 2013-05-08 11:13:27