“chomp”后,返回文件中的所有行

时间:2014-01-03 14:16:39

标签: perl subroutine

我有一个子程序,用于逐行读取文件的内容。是否可以继续该过程而不是只返回一行?

sub read_lines {
    my ($file) = @_;
    if (open(my $fh, "<", $file)) {
        while (my $data = <$fh>)  {
            chomp ($data);
            return $data;   
        }
    }
}

2 个答案:

答案 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);