Perl如何读入文件,它如何告诉它前进到文本文件中的下一行,以及它如何使它读取.txt文件中的所有行,直到它到达项目“banana” “?
答案 0 :(得分:21)
基本上,有两种方法可以读取文件:
对于这两种方式,您需要使用“open”命令创建FILEHANDLE,如下所示:
open(my $yourhandle, '<', 'path/to/file.txt') # always use a variable here containing filename
or die "Unable to open file, $!";
然后你可以通过将文件放入一个数组来啜饮文件:
my @entire_file=<$yourhandle>; # Slurp!
或使用while循环逐个读取文件
while (<$yourhandle>) { # Read the file line per line (or otherwise, it's configurable).
print "The line is now in the $_ variable";
last if $_ eq 'banana'; # Leave the while-loop.
}
之后,不要忘记关闭文件。
close($yourhandle)
or warn "Unable to close the file handle: $!";
这只是基础知识..文件有很多相关内容,特别是在异常处理中(当文件不存在时,该文件不可读,正在写入),所以你必须阅读或者离开:)
答案 1 :(得分:19)
答案 2 :(得分:1)
首先,你必须打开文件:
open (my $SOME_FILEHANDLE, "<", "filename.txt");
您可能想要检查文件的打开是否成功:
open (my $SOME_FILEHANDLE, "<", "filename.txt") or die "could not open filename";
打开文件后,您可以从$ SOME_FILEHANDLE中读取每行的行数。您将获得<$SOME_FILEHANDLE>
构造的下一行:
my $next_line = <$SOME_FILEHANDLE>;
阅读完最后一行后, $next_line
未定义。因此,您可以将整个事物放入while
循环:
while (my $next_line = <$SOME_FILEHANDLE>) {
do_something($next_line);
}
这是有效的,因为未定义的值在while条件下的计算结果为false
。
如果您想在遇到“banana”时退出循环,您可能会使用正则表达式来检查香蕉:
while (my $next_line = <$SOME_FILEHANDLE>) {
last if $next_line =~ /banana/;
do_something($next_line);
}
last
运算符退出while循环,当$next_line
与香蕉匹配时,它会被“触发”。