我有一个子程序,用于逐行读取文件的内容。是否可以继续该过程而不是只返回一行?
sub read_lines {
my ($file) = @_;
if (open(my $fh, "<", $file)) {
while (my $data = <$fh>) {
chomp ($data);
return $data;
}
}
}
答案 0 :(得分:5)
如果您只想将文件的所有行放在数组中,您也可以这样写:
sub read_lines {
my $file = shift;
if (open(my $fh, "<", $file)) {
my @lines = <$fh>;
chomp(@lines);
close $fh;
return @lines;
} else {
die "Failed to open Filehandle for '$file': $!\n";
}
}
或使用File :: Slurp(更快):
use File::Slurp;
my @lines = read_file($file);
chomp(@lines);
答案 1 :(得分:1)
不要从循环内部返回。 VOV
sub read_lines {
my $file = shift;
my @result = ();
if (open(my $fh, "<", $file)) {
while (<$fh>) {
chomp;
push @result, $_;
}
}
@result;
}
my @lines = read_lines($file);
或更短的等价物。
sub read_lines {
my $file = shift;
open(my $fh, "<", $file) or return;
my @lines = <$fh>;
chomp @lines;
return @lines;
}
my @lines = read_lines($file);