我正在编写一个将文件读入数组的perl脚本。我在Windows上编写了程序,使用Perl 5.16(它也适用于5.14),并且使用带有Perl 5.12的Mac时脚本失败。
失败的部分是:my @array = <$file>
。在Mac上,数组返回正确的大小(与文件中的行数相同),但除最后一个元素之外的每个元素都是空的。当我切换到这个代码时代码正常工作:
my @array;
while(<$file>){
push @array, $_;
}
如果我将行结尾切换为LF
而不是CRLF
(Windows样式),我不确定它是否会有所作为。虽然问题得到解决,但让我感到困惑。我认为我列出的那两个代码片段完全相同的东西。它们有什么不同,会产生不同的结果?
答案 0 :(得分:1)
答案是这两种方法完全等同,正如您所怀疑的那样。例如:
my $start = tell DATA; #store beginning filehandle position
my @array1 = <DATA>;
seek DATA,$start,0; #reset filehandle position
my @array2;
while(<DATA>){
push @array2,$_;
}
print "List assignment:\n @array1\n";
print "Looping through:\n @array2\n";
__DATA__
1
2
foo
bar
您以前的失败可能是别的。可能涉及到Mac上的Perl或Mac文件IO的某些问题,但更可能是你的代码的其他部分(我的意思是没有个人的:我会对我自己的代码做出相同的假设)。