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