我打开了一个文件来逐行阅读:
open(FH,"<","$myfile") or die "could not open $myfile: $!";
while (<FH>)
{
# ...do something
}
稍后在程序中,我尝试重新读取文件(再次通过文件):
while (<FH>)
{
# ...do something
}
并意识到它就好像文件中的控件位于EOF并且不会从文件中的第一行迭代....这是默认行为吗?如何解决这个问题?文件很大,我不想将内存保存为数组。那么我唯一的选择是再次关闭并打开文件吗?
答案 0 :(得分:21)
使用seek回到文件的开头:
seek FH, 0, 0;
或者,更详细:
use Fcntl;
seek FH, 0, SEEK_SET;
请注意,如果您必须搜索输入,则会极大地限制工具的实用性,因为它永远不能用作过滤器。能够从管道读取是非常有用的。请记住,57%的统计数据都是弥补的,你应该意识到,98%的寻求输入的程序都是不必要的。非常努力地处理您的数据,这样您就不需要两次读取数据。如果可能,您的程序将更有用。
答案 1 :(得分:5)