我写了一些代码(大约100行),它在5.12.1版本上运行良好。 不幸的是我的客户端使用的是版本5.10.0。所以我测试了5.10.0上的代码,发现它不起作用!
我在哪里可以找到5.10和5.12之间的差异列表?
我认为“我在哪里可以找到5.10和5.12之间的差异列表”问题的最佳答案是“{3}}”在“已接受的答案”下的评论。有关以下代码的说明,请阅读plusplus。
适用于5.12.1但在5.10.0上不起作用的代码($contents
在运行代码后仍为空字符串)
# read in the first 10 lines.
my $contents = '';
for (my $i = 0; $i < 10 && ! eof; $i++) {
$contents .= <FILE>;
}
适用于两个版本的改进代码。
# read in the first 10 lines.
my $contents = '';
my $i = 0;
while (<FILE>) {
last if $i >= 10;
$contents .= $_;
$i++;
}
答案 0 :(得分:9)
您的第一个代码示例中存在错误。最后一个文件句柄的裸eof
报告状态。在第一次通过循环时,你(可能)还没有读过任何东西;不管怎样来自FILE
。此无效调用的内部行为似乎已更改。在Perl 5.12.1下,运行perl -E "say eof"
不打印任何内容。在Perl 5.10.0下,它打印“1”。
明确测试eof(FILE)
应该可以解决问题。
Tangent:你的代码不是很惯用。更有意义的方法是
my $content;
while(<$fh>) {
if ( 1 .. 10 ) { $content .= $_ }
else { last }
}
使用的习语是:
$fh
代替FILE
)..
跟踪读取的行数。这个表格
隐式测试输入行号$.
。last
提前退出循环。答案 1 :(得分:4)
查看perldoc页面。你会发现perldelta在那里。或者发布您的代码并让我们看一下;)