刷新线读操作符Perl

ayk*_*kut 3 perl file-io filestream

在perl中使用<>运算符到达eof后会发生什么?

我正在逐行阅读INP1

while(<INP1>) {
}
Run Code Online (Sandbox Code Playgroud)

但我需要多次读取这个,我需要每次从文件的开头开始.我怎样才能做到这一点?是否有像在perl中刷新流的东西?

提前致谢.

mob*_*mob 8

如果INP1连接到常规文件句柄(不是套接字句柄或管道句柄),您也可以seek返回到文件的开头.

while(<INP1>) {
   ...
}
seek INP1, 0, 0;

# do it again
while (<INP1>) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是将整个文件加载到一个数组中,然后根据需要循环遍历该数组.如果整个文件适合内存并且文件内容在遍历之间不会改变,那么这是一个好主意.

open INP1, '<', $the_file;
@INP1 = <INP1>;
close INP1;

foreach (@INP1) {
   ...
}

# do it again
foreach (@INP1) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

  • `使用autodie;` (3认同)
  • 使用词法范围的文件句柄 (2认同)