Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl 5.12.1上运行良好的代码不会';不要在5.10.0上工作_Perl - Fatal编程技术网

在Perl 5.12.1上运行良好的代码不会';不要在5.10.0上工作

在Perl 5.12.1上运行良好的代码不会';不要在5.10.0上工作,perl,Perl,我写了一些代码(大约100行),在5.12.1版上运行良好。 不幸的是,我的客户使用的是5.10.0版。所以我在5.10.0上测试了代码,发现它不起作用 在哪里可以找到5.10和5.12之间的差异列表 编辑: 我认为,对于“我在哪里可以找到5.10和5.12之间的差异列表”的问题,最好的答案是“接受答案”下的评论。有关下面代码的解释,请阅读 适用于5.12.1但不适用于5.10.0的代码($contents运行代码后仍然是空字符串) #读入前10行。 我的$contents=''; 对于(我

我写了一些代码(大约100行),在5.12.1版上运行良好。 不幸的是,我的客户使用的是5.10.0版。所以我在5.10.0上测试了代码,发现它不起作用

在哪里可以找到5.10和5.12之间的差异列表


编辑: 我认为,对于“我在哪里可以找到5.10和5.12之间的差异列表”的问题,最好的答案是“接受答案”下的评论。有关下面代码的解释,请阅读


适用于5.12.1但不适用于5.10.0的代码(
$contents
运行代码后仍然是空字符串)

#读入前10行。
我的$contents='';
对于(我的$i=0;$i<10&&!eof;$i++){
$contents.=;
}
在两个版本上都有效的改进代码

# read in the first 10 lines.
my $contents = '';
my $i = 0;
while (<FILE>) {
    last if $i >= 10;
    $contents .= $_;
    $i++;
} 
#读入前10行。
我的$contents='';
我的$i=0;
而(){
如果$i>=10,则为最后一个;
$contents.=$\ux;
$i++;
} 

查看页面。你会在那里找到perldelta的。或者发布您的代码并让我们查看;)

您的第一个代码示例中有一个bug。裸
eof
报告上次读取文件句柄的状态。在第一次通过循环的时候,你(大概)还没有读到任何东西;无论如何,文件中没有任何内容。似乎此无效调用的内部行为已更改。在Perl5.12.1下运行
Perl-E“sayeof”
不会打印任何内容。在Perl5.10.0下,它打印“1”

显式测试
eof(FILE)
应该可以解决这个问题

Tangent:您的代码不是很地道。一个更完美的方法是

my $content;
while(<$fh>) {
    if ( 1 .. 10 ) { $content .= $_ }
    else           { last }
}
my$content;
while(){
如果(1..10){$content.=$\u0}
else{last}
}
使用的成语有:

  • 使用词法文件句柄而不是typeglob。(
    $fh
    而不是
    文件
  • 使用范围运算符
    跟踪读取的行数。这张表 隐式测试输入行号
    $。
  • 不要显式地测试EOF(让循环处理它)
  • 使用
    last
    提前中断循环

代码大约有100行。我会尽力找出那些引起问题的台词,并于明天在这里发布。提前谢谢!晚安因为从标题上看不太明显,主要版本号5.10和5.12.0之间的差异,以及5.12.0和5.12.1之间的差异-你需要同时检查这两个版本,尽管第一个版本可能最有用。我在问题中发布了我的代码。有人知道为什么for循环在5.10版上不起作用吗?很明显,你的海森堡补偿器没有对齐,需要重新极化。或者这是我在没有看到错误消息的情况下的最佳猜测。绑定文件句柄现在有一个额外的方法EOF,它提供EOF类型。“不工作”不是一个有用的描述。你需要告诉我们1)你期望它做什么,2)它实际做了什么。@Michael-我认为代码中的注释足够清楚,可以告诉你我期望从一个文件中读取10行。“不工作”意味着代码在5.10版上无法做到这一点。无论如何,我已经编辑了这个问题,使我的观点更清楚。看来这就是我的代码片段的问题。我认为
eof
的工作方式与“切线”中的CGood点相同!谢谢我仍然在用C/Java的方式思考。需要更加完美;)
my $content;
while(<$fh>) {
    if ( 1 .. 10 ) { $content .= $_ }
    else           { last }
}