使用while和数组赋值迭代行之间的差异

时间:2012-08-17 16:57:16

标签: macos perl text

我正在编写一个将文件读入数组的perl脚本。我在Windows上编写了程序,使用Perl 5.16(它也适用于5.14),并且使用带有Perl 5.12的Mac时脚本失败。

失败的部分是:my @array = <$file>。在Mac上,数组返回正确的大小(与文件中的行数相同),但除最后一个元素之外的每个元素都是空的。当我切换到这个代码时代码正常工作:

my @array;
while(<$file>){
    push @array, $_;
}

如果我将行结尾切换为LF而不是CRLF(Windows样式),我不确定它是否会有所作为。虽然问题得到解决,但让我感到困惑。我认为我列出的那两个代码片段完全相同的东西。它们有什么不同,会产生不同的结果?

1 个答案:

答案 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的某些问题,但更可能是你的代码的其他部分(我的意思是没有个人的:我会对我自己的代码做出相同的假设)。