17

我打开一个文件逐行读取:

open(FH,"<","$myfile") or die "could not open $myfile: $!";
while (<FH>)
{
    # ...do something
}

稍后在程序中,我尝试重新读取文件(再次遍历文件):

while (<FH>)
{
    # ...do something
}

并意识到好像文件中的控件位于 EOF 并且不会从文件的第一行迭代......这是默认行为吗?如何解决这个问题?该文件很大,我不想将其作为数组保存在内存中。那么我唯一的选择是关闭并再次打开文件吗?

4

2 回答 2

26

使用 seek 倒回文件的开头:

seek FH, 0, 0;

或者,更冗长:

use Fcntl;
seek FH, 0, SEEK_SET;

请注意,如果您必须搜索输入,它会极大地限制您的工具的实用性,因为它永远不能用作过滤器。能够从管道中读取是非常有用的,并且您应该努力安排您的程序,以便不需要查找。

于 2012-08-20T19:14:55.807 回答
5

你有几个选择。

于 2012-08-20T19:15:42.923 回答