【发布时间】:2014-08-01 03:55:07
【问题描述】:
我的输入数据文件的结构使得以N 行的块而不是一次读取一行数据更符合逻辑。当然,我可以使用像
my @lines=();
while(!eof($FH)) {
for(my $i=0;$i<$N;$i++)
$lines[$i]=<FH>;
chomp();
}
# proceed with analysis of N-size block ##
}
由于输入文件非常大(GB),但是我想知道是否有比for 循环更有效的解决方案。例如,我找到了另一个解决方案online,它使用了map 函数,尽管当我尝试在我的脚本中实现它时,它会导致错误("my" variable @lines masks earlier declaration in same statement):
while(( my @lines = map $_ = <>, 1 .. 4 )[0]) {
print @lines;
print "\n";
}
诚然,我不明白这段代码 while 块中 [0] 的意义,另一个解决方案建议使用 [-1] 代替。
考虑到操作的 I/O 密集度,我想知道解决这个问题(在 Perl 编程语言范围内)的计算效率最高的解决方案是什么。
【问题讨论】:
标签: perl