我希望能够在不增加行计数器的情况下读取“下一行”,以便下次读取命令时它将读取相同的行。
示例:
这是第一行
这是第二行
这是第三行
我希望能够知道第二行说“这是第二行”,但没有推进我的计数器以便我的程序:
print <>;
print unknown_read_command;
print <>;
将在屏幕上打印:
这是第一行 这是第二行 这是第二行
更一般地说,如何在任何方向和我想要的任何数量上更改和移动指向线的指针?
答案 0 :(得分:7)
您可以使用tell获取文件句柄的文件位置,并使用seek进行设置:
my $pos = tell $fh;
# ...
seek $fh, $pos, 0 or die "Couldn't seek to $pos: $!\n";
答案 1 :(得分:3)
如果您是逐行阅读,另一种方法是使用Tie::File
:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::File;
my $fn = "foo.bar";
tie my @myFileLines, 'Tie::File', $fn or die "$?";
print STDOUT $myFileLines[0];
print STDOUT $myFileLines[1];
print STDOUT $myFileLines[1]; # print second line twice
untie @myFileLines;
使用文件搜索方法更通用,您必须自己搜索换行符分隔符,Windows会使用专有换行符。