我在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
符号组合之前读取文件。
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
您应该传递子例程file_print
file_print(\@lines);
然后在子程序中:
$lines = shift;
@lines = @$lines;
这将完成这项工作。