我尝试了以下代码段,搜索功能似乎无法正常工作。
funct("ls -ltr /scratch/dummy/dum*");
sub funct {
print "\nRecording\n";
open(SENSOR_LIST1, "$_[0] |") || die "Failed to read sensor list: $!\n";
for $sensor_line1 (<SENSOR_LIST1>) {
print "$sensor_line1";
}
my $pos = tell SENSOR_LIST1;
print "\nposition is $pos"; #Here the position is 613
print "\nRecording again";
seek (SENSOR_LIST1, SEEK_SET, 0);
$pos = tell SENSOR_LIST1; # Here again the position is 613, even after a seek
print "\nposition now is $pos";
for $sensor_line1 (<SENSOR_LIST1>) {
print "$sensor_line1";
}
close SENSOR_LIST1;
}
注意:寻求的所有变体都不起作用。
输出:
即使在寻求之后,该位置也不会改变。它仍然在613年。
你们可以检查并告诉我这里的问题是什么?
感谢。
答案 0 :(得分:6)
你不能在管道上寻找。
使用临时文件或将数据存储在内存中。
您选择最佳解决方案
答案 1 :(得分:1)
尝试将ls
命令的输出写入文件并打开该文件,而不是直接读取命令的输出。对于瞬态数据流(例如命令的输出),seek
不能只读取在读取后仍然存在的数据(例如文件)。